gpt4 book ai didi

c++ - 在迭代 Vector 时向其添加元素

转载 作者:太空狗 更新时间:2023-10-29 19:57:18 26 4
gpt4 key购买 nike

正如标题所说,我想在某些情况下向 std::vector 添加一个元素,同时遍历 vector 。使用以下代码,我收到错误“调试断言失败”。有没有可能实现我想做的事情?

这是我测试过的代码:

#include <vector>

class MyClass
{
public:
MyClass(char t_name)
{
name = t_name;
}
~MyClass()
{
}
char name;
};

int main()
{
std::vector<MyClass> myVector;
myVector.push_back(MyClass('1'));
myVector.push_back(MyClass('2'));
myVector.push_back(MyClass('3'));

for each (MyClass t_class in myVector)
{
if (t_class.name == '2')
myVector.push_back(MyClass('4'));
}
return 0;
}

编辑:

嗯,我认为 for each 是标准的 C++,但它似乎是 Visual Studio 的一个特性:

for each, in

Visual c++ "for each" portability

最佳答案

std::vector 中添加或删除项目的行为会使现有的迭代器无效。所以你不能使用任何依赖迭代器的循环,比如 for each, in , range-based for , std::for_each()等。您将不得不使用索引来循环,例如:

int main()
{
std::vector<MyClass> myVector;

myVector.push_back('1');
myVector.push_back('2');
myVector.push_back('3');

std::vector<MyClass>::size_type size = myVector.size();
for (std::vector<MyClass>::size_type i = 0; i < size; ++i)
{
if (myVector[i].name == '2')
{
myVector.push_back('4');
++size; // <-- remove this if you want to stop when you reach the new items
}
}

return 0;
}

关于c++ - 在迭代 Vector 时向其添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com