我有一个函数返回vector<__int16>
个44000个成员。
vector<__int16> get_vector_by_param(char param);
现在我想调用该函数10次,并将返回的向量连接到一个大向量。
类似的东西:
vector<__int16> whole_vector;
for(int i = 0 ; i < 10; ++i) {
vector<__int16> ret = get_vector_by_param(i);
whole_vector.append(ret);
}
因此新矢量的大小将是非常重要的,大约0.5 MB。
在C ++中最好的方法是什么?
也许是迭代者?它有帮助吗?
答案 0 :(得分:4)
像标准库一样设计你的功能。而不是总是返回一个向量,接受输出迭代器并将元素插入到:
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;
}
现在您可以使用一个向量来处理所有数据;如果您确切知道将会有多少元素,您可以预先保留内存:
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;
}
最后,除非你知道你有一些约束要事先做好,否则你应该以任何方式设计事物,以便你更容易完成工作。让数据(即你的探查者)告诉你事情进展缓慢以及可以改进的地方。
尝试让第一次尝试变得更加完美是比较干净(通常是错误和错误),而不是先干净地进行优化。