如何连接/合并向量
How to concatenate/merge vectors
>我正在尝试找出一种方法将 2 个向量和一个整数合并为一个向量。
return data.push_back(fn(data1), mid, fn(data2));
注意:这是一个递归函数。 向量数据在到达 return 语句之前存储了值。 我需要使用 return 语句中的值更新数据中的值。
我完全不知道该怎么做。 我已经搜索了几个小时,但似乎没有任何效果!
非常感谢任何指导。
std::vector::insert()
接受迭代器范围:
std::vector<int> left(fn(data1));
std::vector<int> right(fn(data2));
data.insert(data.end(), left.begin(), left.end());
data.push_back(mid);
data.insert(data.end(), right.begin(), right.end());
return data;
您还可以使用来自<algorithm>
的std::copy()
和来自<iterator>
std::back_inserter()
:
std::copy(left.begin(), left.end(), std::back_inserter(data));
data.push_back(mid);
std::copy(right.begin(), right.end(), std::back_inserter(data));
但是,insert()
可以提前知道其输入范围的大小并reserve()
适当的内存量,而back_insert_iterator
是不透明的 - 它只是反复调用push_back()
。它们都以线性时间运行,但insert()
可能会进行较少的分配。
如果矢量的元素移动比复制更有效,则可以使用 <iterator>
中的 C++11 std::make_move_iterator()
来调整输入范围:
data.insert(data.end(),
std::make_move_iterator(left.begin()),
std::make_move_iterator(left.end()));
data.push_back(mid);
data.insert(data.end(),
std::make_move_iterator(right.begin()),
std::make_move_iterator(right.end()));
虽然我怀疑这会对int
产生影响.
将std::back_inserter
与std::copy
一起使用。 例如:
void foo(vector<int> lhs, vector<int>& rhs)
{
vector<int> result;
copy( lhs.begin(), lhs.end(), back_inserter(result));
copy( rhs.begin(), rhs.end(), back_inserter(result));
result push_back(42);
return result;
}
您希望使用接受 3 个迭代器参数的插入成员函数。
相关文章:
- 将向量的 N 段合并到位C++
- 使用向量在 c++ 中合并排序实现
- 如何合并函数返回的向量?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- C++ 合并排序返回原始向量
- 如何修复错误:使用向量查找最小值和最大值进行合并排序
- C++ 使用向量实现合并排序
- 如何使用C++有效地合并排序与向量
- 使用 move::语义将大量向量合并为更大的向量
- 合并排序的合并操作无法使用 c++ 向量
- 如何在C 中合并两个向量
- 合并,分类和删除重复分类的向量和未分类的向量
- 使用STL算法合并2个向量
- 合并2个不同长度的向量并事先对它们进行排序,而无需排序函数
- 将函数两个向量合并为第三个向量
- 使用不同的比较函数合并两个排序的双向量
- 合并排序 c++ 1 参数 - 向量
- 如何连接/合并向量
- 向量的合并向量
- 在向量<向量>初始化中合并向量和initializer_list<T>?