作者:政委锤炼_394_774 | 来源:互联网 | 2022-12-02 16:27
很明显,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
得到:
1 2 3 4 5 6 7 8 9
它完全适合我,但每当我使用向量执行此操作时,它会抛出一个错误:
vector > v={{1,2,3},{4,5,6},{7,8,9}};
int m=v.size();
int n=v[0].size();
for(int i=0;i
它给 :
no match for ‘operator*’ (operand type is ‘std::vector >)
我希望向量确实遵循行主要形式概念作为数组.如果是,那么在向量的情况下,行大调的替代方法是什么?
1> 小智..:
你走错了路.由于std::vector
在免费存储上动态分配内存,因此不存在行主要或列主要内容.
从2d阵列int foo[][]{ { 1, 2, 3 }, { 4, 5, 6 } }
开始的内存&foo[0]
:
1, 2, 3, 4, 5, 6
可视化:
+------+
| foo |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+------+
记忆std::vector> foo{ { 1, 2, 3 }, { 4, 5, 6 } }
:
某处(与之无关&foo
):
1, 2, 3
别的地方:
4, 5, 6
可视化:
+------+
+--> | int |
+-------------------------+ | +------|
| foo | | | 1 |
+-------------------------+ +------------------+ | | 2 |
| std::vector *data -|-----> | std::vector | | | 3 |
+-------------------------+ +------------------+ | +------+
| int* data[0]-----|--+
| int* data[1]-----|--+ +------+
+------------------+ +--> | int |
+------+
| 4 |
| 5 |
| 6 |
+------+
遍历你std::vector
的std::vector
s:
for (auto const &v_item : v) {
for (auto const &i : v_item) {
std::cout <