我可以使用预先存在的数据创建std::vector
,而不是分配新内存并复制数据吗?
更清楚一点,如果我有一个内存区域(c-array或另一个向量的一部分或其他)并且我想提供类似矢量的访问,我可以创建一个向量并告诉它使用它内存块?
答案 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