向量 push_back 不工作 C++
vector push_back doesn't work c++
为什么 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 个警告,所以我认为它很好,直到我 运行 它。
您的代码确实有效。但是,您在创建矢量时指定了矢量的初始大小。您的矢量以 100 个元素的初始大小开始。话虽如此,您确实是在向数组中添加新元素,但是 push_back() 将它放在已经存在的数组之后 - 在第 100 个位置。
您可以使用默认构造函数来避免它
vector<string> STRING;
此外,我将在此处粘贴我的 printList 函数,它将告诉您问题出在哪里:
void printList(vector<string> &STRING)
{
cout << "size: " << STRING.size() << '\n';
for (int i = 0; i < STRING.size(); i++)
cout << i << ":" << STRING[i] << ", ";
cout << '\n';
}
@Edit:修复了语法错误(Vector 而不是 vector)。感谢您指出 Christian Hackl!
为什么 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 个警告,所以我认为它很好,直到我 运行 它。
您的代码确实有效。但是,您在创建矢量时指定了矢量的初始大小。您的矢量以 100 个元素的初始大小开始。话虽如此,您确实是在向数组中添加新元素,但是 push_back() 将它放在已经存在的数组之后 - 在第 100 个位置。
您可以使用默认构造函数来避免它
vector<string> STRING;
此外,我将在此处粘贴我的 printList 函数,它将告诉您问题出在哪里:
void printList(vector<string> &STRING)
{
cout << "size: " << STRING.size() << '\n';
for (int i = 0; i < STRING.size(); i++)
cout << i << ":" << STRING[i] << ", ";
cout << '\n';
}
@Edit:修复了语法错误(Vector 而不是 vector)。感谢您指出 Christian Hackl!