gpt4 book ai didi

c++ - 如何连接/合并 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:39 26 4
gpt4 key购买 nike

我正在尝试找出一种将 2 个 vector 和一个整数合并为一个 vector 的方法。即

return data.push_back(fn(data1), mid, fn(data2));

注意这是一个递归函数。 vector 数据在到达返回语句之前已将值存储在其中。我需要用返回语句中的值更新数据中的值。

我完全不知道该怎么做。我已经搜索了几个小时,但似乎没有任何效果!

非常感谢任何指导。

最佳答案

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() 来自 <algorithm> std::back_inserter() 来自 <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()可能会进行更少的分配。

如果您的 vector 元素移动比复制更有效,您可以使用 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()));

尽管我怀疑这会对 int 产生影响.

关于c++ - 如何连接/合并 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com