如何连接/合并向量

Coc*_*ola 4 c++ vector

我试图想出一种方法将2个向量和一个整数合并为一个向量.即

return data.push_back(fn(data1), mid, fn(data2));
Run Code Online (Sandbox Code Playgroud)

NB这是一个递归函数.向量数据在到达return语句之前具有存储在其中的值.我需要使用return语句中的值更新数据中的值.

我完全不知道如何去做这件事.我一直在寻找几个小时,但似乎什么都没有用!

非常感谢任何指导.

Jon*_*rdy 11

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;
Run Code Online (Sandbox Code Playgroud)

您还可以使用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));
Run Code Online (Sandbox Code Playgroud)

但是,insert()可以事先知道其输入范围的大小和reserve()适当的内存量,而back_insert_iterator不透明 - 它只是反复调用push_back().它们都以线性时间运行,但insert()可能会减少分配.

如果您的向量的元素是更有效的移动,而不是复制,你可以使用C++ 11 std::make_move_iterator()<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()));
Run Code Online (Sandbox Code Playgroud)

虽然我怀疑这会有所作为int.