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

vector string push_back is not working in c++

本文关键字:不起作用 back 字符串 push 向量      更新时间:2023-10-16

此代码段接收字符串,定界符(空格)和向量为参数,并根据定界线将字符串分配,并将其存储在向量中。如果我使用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);
}

如果您已经预先分配了一些大小(n)的向量,则推回(item)将项目放在索引n,并将矢量调整到更大的尺寸。如果您知道到期的字符串计数,则在分配大小n。

之后,应该使用elems[i] = item;

如果您不知道计数,但是知道它将大于某些n,则不会预先分配。而是使用elems.reserve(n);

保留一些内存

然后使用elems.push_back(item);

main函数中,请从

中更改项目声明
vector<string> item(2);

to

vector<string> item;

更改split功能以使用push_back

void split(const std::string & input,char delim, std::vector<std::string> & elems){
    std::stringstream  ss;
    ss.str(input);
    std::string item;
    int i = 0; // no more required unless for some other purpose
    while(getline(ss,item,delim)){
        elems.push_back(item);
        //elems[i] = item;
        i++; // no more required
    }
}