我试图找出一种将 2 个向量和一个整数合并为一个向量的方法。IE
return data.push_back(fn(data1), mid, fn(data2));
注意这是一个递归函数。矢量数据在到达返回语句之前已存储在其中的值。我需要使用 return 语句中的值更新 data 中的值。
我完全不知道该怎么做。我一直在寻找几个小时,但似乎没有任何工作!
非常感谢任何指导。
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;
您还可以使用std::copy()
from<algorithm>
和std::back_inserter()
from <iterator>
:
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()
可能会进行更少的分配。
如果向量的元素移动比复制更有效,则可以使用 C++11 std::make_move_iterator()
from<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 个迭代器参数的插入成员函数。