此代码片段接收字符串、分隔符(空格)和 vector 作为参数,并根据分隔符拆分字符串并将其存储在 vector 中。如果我使用 push_back,它不会将任何内容存储到 vector 中,但如果我使用 [] 运算符,它就可以工作。有人可以解释为什么 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);
}
最佳答案
如果您预先为 vector 分配了某个大小 (n),则 pushback(item) 会将 item 放在索引 n 处并将 vector 调整为更大的大小。如果您知道应输入的字符串计数,那么无论如何在分配大小为 n 之后,您都应该使用 elems[i] = item;
。
如果您不知道传入的计数,但知道它会大于某个 n,请不要预分配。相反,使用 elems.reserve(n);
然后使用elems.push_back(item);
关于c++ - vector 字符串 push_back 在 C++ 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41177257/