向量字符串 push_back 在 C++ 中不起作用

use*_*571 0 c++ string containers vector

此代码片段接收字符串、分隔符(空格)和向量作为参数,并根据分隔符拆分字符串并将其存储在向量中。如果我使用 push_back,它不会将任何内容存储到向量中,但如果我使用 [] 运算符,它就可以工作。有人可以解释为什么 push_back 不起作用吗?

void split(const string & input,char delim,vector<string> & elems){
    stringstream  ss;
    ss.str(input);
    string item;
    int i = 0;
    while(getline(ss,item,delim)){
        //elems.push_back(item);
        elems[i] = item;
        i++;
    }
}

int main(){
   char delim = ' ';
   vector<string> item(2);
   string input;
   getline(cin,input);
   split(input,delim,item);
}
Run Code Online (Sandbox Code Playgroud)

pat*_*p93 6

如果您预先分配了某个大小 (n) 的向量,则 pushback(item) 将 item 放在索引 n 处并将向量调整为更大的大小。如果您知道到期的字符串计数,那么您应该elems[i] = item;在大小为 n 的分配之后使用任何方式。

如果您不知道进来的计数,但知道它会大于某个 n,请不要预先分配。相反,保留一些内存elems.reserve(n);

然后使用 elems.push_back(item);