用于现有数据的C ++ STL向量

时间:2012-10-31 09:48:40

标签: c++ stl vector

我可以使用预先存在的数据创建std::vector,而不是分配新内存并复制数据吗?

更清楚一点,如果我有一个内存区域(c-array或另一个向量的一部分或其他)并且我想提供类似矢量的访问,我可以创建一个向量并告诉它使用它内存块?

3 个答案:

答案 0 :(得分:7)

不,但你可以编写自己的类来执行此操作。由于这是一个相当普遍的需求,如果其他人已经这样做,我也不会感到惊讶。

然而,正常的C ++方式是编写模板代码来操作迭代器。您可以为向量的任何部分或C数组的任何部分(以及其他许多部分)创建迭代器。因此,为迭代器编写模板代码可能就是你应该做的。

答案 1 :(得分:2)

由于您可以在创建vector时使用自定义分配器,因此技术上可行。

然而,我不推荐它。我只是创建一个具有固定大小的向量(显然你可以得到它),然后使用std::copy

答案 2 :(得分:1)

迭代容器的算法接受一对定义输入范围的迭代器。您可以将算法与迭代器一起使用,迭代器指向大容器的中间位置。

示例:

std::vector<int> big_vector(100000);
// initialize it
//...
std::sort(big_vector.begin()+100, big_vector.begin()+200); // sort a subrange

int big_array[100000]; //c-style array
// initialize it
//...
std::sort(std::begin(big_array)+300, std::begin(big_array)+400); // sort a subrange