有效地连接几个向量

时间:2016-01-29 17:54:04

标签: c++ vector

我有一个函数返回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 ++中最好的方法是什么?

也许是迭代者?它有帮助吗?

1 个答案:

答案 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;
}

最后,除非你知道你有一些约束要事先做好,否则你应该以任何方式设计事物,以便你更容易完成工作。让数据(即你的探查者)告诉你事情进展缓慢以及可以改进的地方。

尝试让第一次尝试变得更加完美是比较干净(通常是错误和错误),而不是先干净地进行优化。