Ale*_*lex 3 c++ foreach vector
正如标题所说,我想std::vector在迭代矢量时在某些情况下添加一个元素.使用以下代码,我收到错误"Debug assertion failed".是否有可能实现我想做的事情?
这是我测试过的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
好吧,我认为for each是标准的C++,但它似乎是一个Visual Studio功能:
添加或删除项目的行为std::vector使现有迭代器无效.所以,你不能使用任何形式的循环依赖于迭代器,例如for each, in,范围为基础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;
}
Run Code Online (Sandbox Code Playgroud)
正如 pyon 所指出的,在迭代向量时(通过迭代器)将元素插入到向量中是行不通的,因为插入元素会导致迭代器失效。但是,您似乎只想将元素推入向量后面。这可以在不使用迭代器的情况下完成,但您应该小心停止条件:
std::vector<MyClass> myVector;
size_t old_size = myVector.size();
for (int i=0;i<old_size;i++) {
if (myVector[i].name == '2') { myVector.push_back(MyClass('4')); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8289 次 |
| 最近记录: |