我是 vector 的新手,需要一些关于 vector 操作的额外帮助。
我目前创建了一个全局 StringArray Vector,它由文本文件中的字符串值填充。
typedef std::vector<std::string> StringArray;
std::vector<StringArray> array1;
我创建了一个名为“Remove”的函数,它从用户那里获取输入,并最终将输入与数组中的第一个值进行比较,看它是否匹配。如果是,则整行将被删除,被删除行下方的所有元素将“打乱”位置以填充游戏。
填充的数组如下所示:
Test1 Test2 Test3
Cat1 Cat2 Cat3
Dog1 Dog2 Dog3
删除函数如下所示:
void remove()
{
string input;
cout << "Enter the search criteria";
cin >> input;
我知道我需要一个循环来遍历数组并将每个元素与输入值进行比较并检查它是否匹配。
我认为这看起来像:
for (int i = 0; i < array1.size(); i++)
{
for (int j = 0; j < array1[i].size(); j++)
{
if (array1[i] = input)
**//Remove row code goes here**
}
}
但据我所知是这样的。我不太确定 A) 该循环是否正确以及 B) 我将如何删除整行(而不仅仅是找到的元素)。我是否需要跨 array1 复制到一个临时 vector ,遗漏指定的行,然后再复制回 array1?
例如,我最终希望用户输入“Cat1”,然后我的 array1 最终为:
Test1 Test2 Test3
Dog1 Dog2 Dog3
感谢所有帮助。谢谢。
最佳答案
所以你的循环就快完成了。您正确地使用一个索引 i
循环遍历外部 vector ,然后使用另一个索引 j
循环遍历内部 vector 。您需要使用 j
来获取要与 input
进行比较的字符串。此外,您需要在 if
语句中使用 ==
进行比较。
for (int i = 0; i < array1.size(); i++)
{
for (int j = 0; j < array1[i].size(); j++)
{
if (array1[i][j] == input)
**//Remove row code goes here**
}
}
然后,删除行与删除任何 vector 元素相同,即调用 array1.erase(array1.begin() + i);
(参见 How do I erase an element from std::vector<> by index? )
关于c++ - 2D vector - 通过搜索删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41422452/