gpt4 book ai didi

c++ - 有效地连接几个 vector

转载 作者:行者123 更新时间:2023-11-27 22:53:49 32 4
gpt4 key购买 nike

我有一个返回 vector<__int16> 的函数拥有 44000 名成员(member)。

vector<__int16> get_vector_by_param(char param);

现在我想调用该函数 10 次,并将返回的 vector 连接到一个大 vector 。

类似的东西:

vector<__int16> whole_vector;
for(int i = 0 ; i < 10; ++i) {
vector<__int16> ret = get_vector_by_param(i);
whole_vector.append(ret);
}

因此新 vector 的大小将非常重要,大约 0.5 MB。

在 C++ 中执行此操作的最佳方法是什么?

也许是迭代器?会有帮助吗?

最佳答案

像标准库一样设计您的函数。不要总是返回一个 vector ,而是接受一个输出迭代器并将元素插入其中:

template <typename OutputIterator>
OutputIterator get_vector_by_param(const char param, OutputIterator out) {
// Whatever you do to generate data:
for (unsigned i = 0; i != 44000; ++i) {
*out++ = static_cast<std::int16_t>(param);
}
return out;
}

现在您可以使用一个 vector 来处理所有数据;如果您确切知道将有多少元素,则可以预先保留内存:

std::vector<std::int16_t> whole_vector;
whole_vector.reserve(44000 * 10);
for(char i = 0; i < 10; ++i) {
get_vector_by_param(i, std::back_inserter(whole_vector));
}

您仍然可以提供便利的功能:

std::vector<std::int16_t> get_vector_by_param(const char param) {
std::vector<std::int16_t> ret;
ret.reserve(44000);
get_vector_by_param(param, std::back_inserter(ret));
return ret;
}

最后,除非您知道要预先满足一些限制条件,否则您应该以任何能让您更轻松地完成工作的方式来设计事物。让数据(即您的分析器)告诉您哪些地方运行缓慢以及哪些地方可以改进。

与先干净利落地然后优化相比,尝试在第一次尝试中就让所有事情都变得完美要困难得多(而且常常是错误的和错误的)。

关于c++ - 有效地连接几个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35090960/

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