通过 "replacing" 迭代器在插入点插入 C++ 向量(具有复杂性)
Insert C++ vector by "replacing" the iterator at the insertion point (with a complication)
有没有一种简单的方法可以将一个向量添加到另一个向量中,并删除
之后插入位置的迭代器(实际上 "replacing the iterator" 使用新向量)?
我想做的是(阅读代码中的评论):
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++;
}
是否有一种优雅的方法可以在不增加 "it" n 次或使用其他变量的情况下实现这一点?
一般来说,我会有任意长度的向量,我更愿意在末尾添加附加新向量,但这并不重要。
我刚刚找到了一个解决方案:
it = dataVector.insert(it+1,it->vec.begin(),it->vec.end());
it = dataVector.erase(it-1);
也许它不是最好的,但它似乎甚至适用于向量 beginning/end 处的 insertinf。感谢您的帮助!
有没有一种简单的方法可以将一个向量添加到另一个向量中,并删除 之后插入位置的迭代器(实际上 "replacing the iterator" 使用新向量)? 我想做的是(阅读代码中的评论):
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++;
}
是否有一种优雅的方法可以在不增加 "it" n 次或使用其他变量的情况下实现这一点? 一般来说,我会有任意长度的向量,我更愿意在末尾添加附加新向量,但这并不重要。
我刚刚找到了一个解决方案:
it = dataVector.insert(it+1,it->vec.begin(),it->vec.end());
it = dataVector.erase(it-1);
也许它不是最好的,但它似乎甚至适用于向量 beginning/end 处的 insertinf。感谢您的帮助!