【发布时间】:2014-12-17 00:29:25
【问题描述】:
由于一些遗留代码,我需要声明一个向量数组。我试过了:
vector< foo> a[numvecs];
然后分配向量:
a[i]=vector<foo>(foosize);
但我似乎无法正确访问或写入内部向量
afile.read((char *)&a[i][0],foosize*sizeof(foo))
导致段错误
我会声明一个向量的向量,但外部向量是固定大小的并且非常小(通常为 1 到 3),而且还由于传统代码的编写方式。另外,当我这样做并尝试在向量中打印任何内容时,我会收到有关类型不匹配的编译器错误,有什么线索吗?
【问题讨论】:
-
vector<vector< foo>> a; a.resize(numvecs,vector<foo>(foosize));呢? -
vector<foo> a[numvecs];不是有效的 C++,除非numvecs是编译时已知的常量;如果代码编译它是因为编译器扩展。无论如何,假设foo是一个可轻松复制的类型,那么您显示的代码应该可以工作。 -
请发MCVE。
-
注意
vector<foo> a[numvecs];分配了所有的向量;a[i] = vector<foo>(foosize);行通过复制大小为foosize的临时向量的大小和内容来更新a[i]。 (与使用resize相比,这有效,但不那么惯用)。 -
numvecs 是实际数字的伪代码,就像 foo 不是编译器在编译时知道的实际类型一样