2014-12-17 2 views
-5

Из-за некоторого устаревшего кода мне нужно объявить массив векторов. Я пробовал:Хотите объявить массив векторов

vector< foo> a[numvecs]; 

затем распределение вектора:

a[i]=vector<foo>(foosize); 

, но я не могу показаться, чтобы правильно обращаться или писать на внутренние векторы

afile.read((char *)&a[i][0],foosize*sizeof(foo)) 

вызывает Segfault

Я бы объявил вектор векторов, но вектор фокуса является фиксированным размером и очень мал (обычно от 1 до 3) и al поэтому из-за того, как написан код legecy. Плюс, когда я это делаю и пытаюсь напечатать что-либо в векторе, я получаю ошибки компилятора о несоответствиях типа, какие-то подсказки?

+0

Что относительно'vector > a; a.resize (numvecs, vector (foosize)); '? –

+3

'vector a [numvecs];' недопустимо C++, если 'numvecs' не является константой, известной во время компиляции; если код компилируется из-за расширения компилятора. В любом случае, предполагая, что 'foo' является тривиально копируемым типом, код, который вы показали, должен работать. – Praetorian

+2

Отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve). – Csq

ответ

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)); 
0
vector <vector <foo> > a; 

a.resize(<size>); 
for(int =0; i < a.size(); i++) { 
    a[i].resize(<size>); 
} 

Я думаю, это должно работать

Смежные вопросы