【发布时间】:2015-01-05 01:02:20
【问题描述】:
我的目标是在堆上创建一个向量数组(每个向量的容量为 10 个整数)。我可以很容易地创建我的数组:
vector<int>* test = new vector<int>[NUM_VERTS];
但是,这会创建一个空向量数组。我知道每个向量将存储至少 10 个整数,因此我想创建大小为 10 的向量,以避免它们多次重新调整大小(我正在读取一个大文件,因此效率很重要)。我怎样才能修改上面的语句,让它做我想要的?
附带说明,我正在使用 VS 2013 并在调试器上苦苦挣扎。当我运行调试器并查看上面test 的内容时,它向我显示了它指向的区域的内存地址,而不是存储在该地址处的内容。有谁知道我如何查看内容而不是地址?
谢谢
PS 我在堆而不是堆栈上创建向量数组,因为该数组非常大(不到一百万个条目)。当我尝试在堆栈上创建它时,出现堆栈溢出错误。
【问题讨论】:
-
动态分配
vector是非常少见的,而且为它们的数组这样做几乎是闻所未闻的。如果在编译时知道NUM_VERTS,则使用vector<vector<int>> test;或array<vector<int>, NUM_VERTS> test;。 -
@Praetorian 我使用向量数组的原因是因为我认为它比使用向量向量更快。正如我所提到的,我正在读取的文件非常大,所以我希望尽可能高效。
-
当你使用
new []操作符分配内存时,唯一可以用来初始化对象的构造函数是默认构造函数。 -
向量数组或向量向量之间不应该有任何明显的性能差异,因为在这两种情况下,外部容器都有连续的存储空间。
-
@Praetorian 除了非常规地避免制作向量数组之外,还有什么理由吗?
标签: c++ arrays vector initialization