如何便宜地将C风格的数组分配给std :: vector?

Dmi*_*riy 23 c++ arrays stl vector stdvector

目前我做以下事情:

// float *c_array = new float[1024];

void Foo::foo(float *c_array, size_t c_array_size) {
  //std::vector<float> cpp_array;

  cpp_array.assign(c_array, c_array + c_array_size);
  delete [] c_array;
}
Run Code Online (Sandbox Code Playgroud)

如何优化此分配?我不想执行元素复制,只是交换指针.

Mar*_*k B 21

当前std::vector不提供任何能力或接口来获取先前分配的存储的所有权.据推测,通过意外传递堆栈地址太容易了,允许比解决的问题更多的问题.

如果你想避免复制到向量中,你需要在整个调用链中使用向量,或者float[]在整个时间内以C方式进行.你不能混合它们.你可以保证&vec[0]它将等同于C阵列,但完全连续,因此在整个程序中使用向量可能是可行的.


Pup*_*ppy 6

目前,std::vector界面不具备从其他任何东西移动或交换的能力std::vector.


Mic*_*l J 5

唯一的方法是创建一个自定义分配器。

  1. 编写一个可以用数组初始化的分配器类。

  2. 使用分配器作为参数实例化向量。