12

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

更清楚地说,如果我有一个内存区域(一个 c 数组或另一个向量的一部分或其他任何东西)并且我想提供对它的类似向量的访问,我可以创建一个向量并告诉它使用这个内存块?

4

3 回答 3

7

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

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

于 2012-10-31T09:52:05.457 回答
2

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

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

于 2012-10-31T09:50:34.870 回答
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
于 2012-10-31T10:00:13.453 回答