[英]Insert C++ vector by “replacing” the iterator at the insertion point (with a complication)
是否有一种简单的方法可以将向量添加到另一个向量中,然后在插入位置删除迭代器(实际上是用新向量“替换迭代器”)? 我想做的是(阅读代码中的注释):
struct Data
{
Data(int i) :d(i) {}
vector<Data> vec;
int d;
};
vector<Data> dataVector = { Data(1), Data(2), Data(3) };
dataVector[1].vec = { Data(41), Data(42) };
// Task: replace Data(2) in dataVector with dataVector[1].vec to get {Data(1),Data(41),Data(42),Data(3)};
for (auto it = dataVector.begin(); it != dataVector.end();) {
if ((*it).d == 2) {
it = dataVector.insert(it,(*it).vec.begin(),(*it).vec.end());
// Now delete Data(2) somehow
// it = dataVector.erase(...
}
else it++;
}
有没有一种优雅的方法来实现这一目标,而又不增加n次或使用其他变量呢? 通常,我将拥有任意长度的向量,并且我希望在末尾添加新向量,但这并不是至关重要的。
我刚刚找到一个解决方案: it = dataVector.insert(it+1,it->vec.begin(),it->vec.end());
it = dataVector.erase(it-1);
也许这不是最好的方法,但即使在向量的开头/结尾插入insertinf,它也似乎可以使用。 谢谢你的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.