You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向栈上的vector数组中添加对象?

向栈上VocabularyTester实例的vector中添加WordPair对象的方法

首先得明确一个小细节:std::vector对象本身(比如VocabularyTester里的wordList、failedPairs这些成员)如果属于栈上的VocabularyTester实例,那么vector对象本身确实在栈上,但它管理的元素是存储在堆内存中的。不过添加元素的操作逻辑和vector是否在栈上无关,操作方式是统一的。

下面是具体的实现步骤和方法:

1. 先确保WordPair类有可用的构造函数

要创建WordPair对象,你需要给它定义合适的构造函数,比如假设是中英文词汇对的场景:

class WordPair {
private:
    std::wstring englishWord;
    std::wstring chineseWord;
public:
    // 带参数的构造函数,用于初始化词汇对
    WordPair(const std::wstring& eng, const std::wstring& chn)
        : englishWord(eng), chineseWord(chn) {}
    
    // 其他必要的成员函数(比如获取词汇的方法)...
};

2. 向vector添加元素的几种常用方式

假设你已经在栈上创建了VocabularyTester的实例:

VocabularyTester myTester; // 这个实例在栈上,它的vector成员也属于栈上对象

方式一:用push_back添加已构造的对象

可以先构造好WordPair对象,再传入vector的push_back方法:

// 先构造一个词汇对对象
WordPair dogPair(L"dog", L"狗");
// 添加到wordList中
myTester.wordList.push_back(dogPair);

也可以直接传入临时构造的对象:

myTester.wordList.push_back(WordPair(L"bird", L"鸟"));

方式二:用emplace_back直接在vector内部构造对象(更高效)

emplace_back会直接在vector的内存空间里构造WordPair对象,避免额外的拷贝操作,是更推荐的方式:

myTester.wordList.emplace_back(L"fish", L"鱼");

方式三:用insert批量添加元素

如果需要从另一个vector或者迭代器范围批量插入元素,可以用insert:

std::vector<WordPair> tempPairs;
tempPairs.emplace_back(L"tiger", L"老虎");
tempPairs.emplace_back(L"lion", L"狮子");

// 把tempPairs里的所有元素插入到wordList的末尾
myTester.wordList.insert(myTester.wordList.end(), tempPairs.begin(), tempPairs.end());

3. 注意私有成员的访问权限

因为wordList、failedPairs这些都是VocabularyTester的私有成员,直接在类外部访问会触发编译错误。所以更规范的做法是在VocabularyTester类中封装公共的添加方法,比如:

class VocabularyTester { 
private: 
    std::vector<WordPair> wordList; 
    std::vector<WordPair> failedPairs; 
    std::vector<WordPair> passedPairs; 
    WordPair recentPair; 
public: 
    VocabularyTester(); 
    void run(); 
    void loadWordList(std::wstring& vocabularyRaw);

    // 封装添加单个词汇对的公共方法
    void addSingleWordPair(const std::wstring& eng, const std::wstring& chn) {
        wordList.emplace_back(eng, chn);
    }

    // 封装批量添加词汇对的公共方法
    void addBatchWordPairs(const std::vector<WordPair>& pairs) {
        wordList.insert(wordList.end(), pairs.begin(), pairs.end());
    }
    // 其他需要的成员函数...
};

之后在外部就可以通过这些公共方法安全地添加元素了:

VocabularyTester myTester;
myTester.addSingleWordPair(L"pig", L"猪");

内容的提问来源于stack exchange,提问作者poplaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:36:31