RIC*_*CKY 4 c++ pointers vector std multidimensional-array
很明显,2D阵列的行主要形式是存储的单个阵列,使得不同的行按顺序排列.
要遍历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;
}
Run Code Online (Sandbox Code Playgroud)
得到:
1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
它完全适合我,但每当我使用向量执行此操作时,它会抛出一个错误:
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)<<" ";
}
Run Code Online (Sandbox Code Playgroud)
它给 :
no match for ‘operator*’ (operand type is ‘std::vector<std::vector<int> >)
Run Code Online (Sandbox Code Playgroud)
我希望向量确实遵循行主要形式概念作为数组.如果是,那么在向量的情况下,行大调的替代方法是什么?
Swo*_*ish 13
你走错了路.由于std::vector在免费存储上动态分配内存,因此不存在行主要或列主要内容.
从2d阵列int foo[][]{ { 1, 2, 3 }, { 4, 5, 6 } }开始的内存&foo[0]:
1, 2, 3, 4, 5, 6
Run Code Online (Sandbox Code Playgroud)
可视化:
+------+
| foo |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+------+
Run Code Online (Sandbox Code Playgroud)
记忆std::vector<std::vector<int>> foo{ { 1, 2, 3 }, { 4, 5, 6 } }:
某处(与之无关&foo):
1, 2, 3
Run Code Online (Sandbox Code Playgroud)
别的地方:
4, 5, 6
Run Code Online (Sandbox Code Playgroud)
可视化:
+------+
+--> | int |
+-------------------------+ | +------|
| foo | | | 1 |
+-------------------------+ +------------------+ | | 2 |
| std::vector<int> *data -|-----> | std::vector<int> | | | 3 |
+-------------------------+ +------------------+ | +------+
| int* data[0]-----|--+
| int* data[1]-----|--+ +------+
+------------------+ +--> | int |
+------+
| 4 |
| 5 |
| 6 |
+------+
Run Code Online (Sandbox Code Playgroud)
遍历你std::vector的std::vectors:
for (auto const &v_item : v) {
for (auto const &i : v_item) {
std::cout << i << ' ';
}
}
std::cout.put('\n');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |