如何连接/合并向量

How to concatenate/merge vectors

本文关键字:合并 向量 连接 何连接      更新时间:2023-10-16

>我正在尝试找出一种方法将 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_inserterstd::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 个迭代器参数的插入成员函数。