C++:为向量中的非连续索引赋值?

Sao*_*obi 1 c++ stl vector

如果我想声明未知大小的向量,则按顺序将值分配给索引5,索引10,索引1,索引100.它在载体中很容易实现吗?

似乎没有简单的方法.因为如果我初始化一个没有大小的向量,那么我不能通过执行resize()或五个push_back()来首先为它分配内存来访问索引5.但调整大小会清除向量中先前存储的值.我可以通过给它一个大小开始构造向量,但我不知道向量应该有多大.

那么我怎么能不必声明一个固定的大小,仍然可以访问向量中的非连续索引?

(我怀疑阵列会更容易完成这项任务).

Ada*_*ght 13

整数键和值之间的std :: map不是一个更简单的解决方案吗?向量将需要连续的内存分配,因此如果您只使用偶尔的索引,则会"浪费"大量内存.


Boj*_*nik 8

调整大小不会清除向量.您可以轻松地执行以下操作:

  if (v.size() <= n)
      v.resize(n+1);
  v[n] = 42;
Run Code Online (Sandbox Code Playgroud)

这将保留向量中的所有值,并添加足够的默认初始值,以便n可以访问索引.

也就是说,如果您不需要所有索引或连续内存,您可能会考虑使用不同的数据结构.

  • 如果新大小小于旧大小,则调整大小会消除额外元素.如果新大小较大,则新元素将"默认初始化"(对于数字类型,这些值为0). (2认同)