Совершенно очевидно, что основной формой строки двумерного массива является отдельный массив, сохраняемый таким образом, что различные строки выровнены по порядку.
Чтобы пройти любой элемент массива 2d, я всегда могу сделать:
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i<3*3;i++){
cout<<*(*a+i)<<" "; //row major form concept where i<m*n;
}
дает:
1 2 3 4 5 6 7 8 9
Это полностью работает для меня, но всякий раз, когда я делаю это свектор, который выдает мне ошибку:
vector<vector<int> > v={{1,2,3},{4,5,6},{7,8,9}};
int m=v.size();
int n=v[0].size();
for(int i=0;i<m*n;i++){
cout<<*(*v+i)<<" ";
}
Это дает:
no match for ‘operator*’ (operand type is ‘std::vector<std::vector<int> >)
Я надеюсь, что векторы следуют концепции главной формы строки как массивы.Если да, то какова альтернатива мажорной строке в случае вектора?