由于一些遗留代码,我需要声明一个向量数组。我试过了:
vector< foo> a[numvecs];
然后分配矢量:
a[i]=vector<foo>(foosize);
但我似乎无法正确访问或写入内部向量
afile.read((char *)&a[i][0],foosize*sizeof(foo))
导致段错误
我声明了一个矢量矢量,但是外部矢量是一个固定的大小,非常小(通常是1到3),也是由于写入了代码的方式。另外,当我这样做并尝试在向量中打印任何内容时,我会遇到关于类型不匹配的编译器错误,任何线索?
答案 0 :(得分:0)
假设numvecs
是编译时常量(或编译器扩展),您至少可以更改此行:
a[i]=vector<foo>(foosize);
到这条简化的行:
a[i].resize(foosize);
如果已正确分配,您显示的访问vector
的内容应该可以正常工作。我建议使用括号来帮助编译器知道你想要它做什么,但是:
afile.read(reinterpret_cast<char*>(&(a[i])[0]), foosize*sizeof(foo));
甚至使用引用使其更易于阅读:
vector<foo> &vec = a[i];
afile.read(reinterpret_cast<char*>(&vec[0]), foosize*sizeof(foo));
答案 1 :(得分:0)
vector <vector <foo> > a;
a.resize(<size>);
for(int =0; i < a.size(); i++) {
a[i].resize(<size>);
}
我认为这应该有用