c++ - vector 字符串 push_back 在 C++ 中不起作用

标签 c++ string vector containers

此代码片段接收字符串、分隔符(空格)和 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/

相关文章:

c++ - 为什么可变参数模板函数会得到 "no matching function for call to .."?

c++ - C++ 中的矩阵类

c++ - sscanf_s : format string '%d' requires an argument of type 'int *' , 但可变参数 4 的类型为 'WORD *'

python - 将 csv 文件中相似的句子字符串分组在一起

C++ - 在需要 Iterator 类型的 vector (或其他容器)构造函数中使用数组/指针。这怎么可能?

vector - 使用两个自旋向量中的点对球体上的 x、y、z 坐标进行插值?

c++ - 每个线程的局部静态变量

java - 从字符串中获取不同数字的列表

java - 如何从 javacc 方法返回字符串?

c++ - 同时对两个 vector (键/值)进行排序的最快方法?