通过在插入点"replacing"迭代器来插入C++向量(有并发症)
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);
也许它不是最好的,但它似乎也适用于向量开头/结尾的插入。感谢您的帮助!
相关文章:
- 如何在向量数组中插入元素?
- 插入向量时,使用lambda的返回而不是函数的返回是否有意义?
- 在每个偶数特定数字之后,插入向量中
- 插入向量后,删除对WSTRING的引用
- 将唯一的_ptr插入向量为一对
- 计算元素插入向量的次数
- 在c++中将临时插入向量
- 在队列中插入向量元素
- 如何在不使用循环的情况下插入向量
- 将元素插入向量并替换所有其他元素的函数,从而截断最终元素
- 默认插入向量不是默认初始化吗?
- C++不会根据需要将数字/数字插入向量
- 将列表元素插入向量,C++获取其他不需要的值
- 通过在插入点"replacing"迭代器来插入C++向量(有并发症)
- 如何将重复元素插入向量
- 在运行递归函数时将新元素插入向量时出现问题
- 将字符串中的每个单词插入向量中,并计算每个单词的出现次数
- 插入向量时的 C++ 临时对象
- 按字母顺序插入向量
- 使用 std::copy 将元素插入向量