矢量push_back不起作用c ++

时间:2017-03-03 15:20:40

标签: c++ string vector push-back

为什么push_back没有按预期工作?非常混淆为什么它不能使用我目前的代码

using namespace std;
void addItem(vector<string>& STRING, string item)
{
    STRING.push_back(item);
}

int main()
{
    string item;
    vector<string> STRING(100);
    ifstream myFile;
    myFile.open("food.txt");

    if (myFile.is_open()) //code where I store my data into the array
    {
        int i = 0;
        while (!myFile.eof())
        {
            getline(myFile, STRING[i]);
            i++;
        }
    }
    myFile.close();

    cin >> item;
    addItem(STRING, item);
    int x = 0;
    while(!STRING[x].empty()) //code to print the current array
    {
        cout << STRING[x];
        printf("\n");
        x++;
        return 0;
    }
}

我初始化数组有什么问题吗?因为当我使用CodeBlocks时,有0个错误和0个警告,所以我认为它很好,直到我运行它。

1 个答案:

答案 0 :(得分:2)

您的代码确实有效。但是,您在创建矢量时指定了矢量的初始大小。您的矢量以100个元素的初始大小开始。话虽如此,你确实在数组中添加了新的元素,但push_back()在已经存在的数组之后将它放在第100位。

您可以使用默认构造函数

来避免它
vector<string> STRING;

另外,我会在这里粘贴我的printList函数,它会告诉你问题所在:

void printList(vector<string> &STRING)
{
    cout << "size: " << STRING.size() << endl;
    for (int i = 0; i < STRING.size(); i++)
        cout << i << ":" << STRING[i] << ", ";
    cout << endl;
}

@Edit:修正了语法错误(Vector而不是vector)。谢谢你指出Christian Hackl!