两层Vector的操作问题
假设有定义为Vector<vector<T>>的一个名为table的变量...
T可以是int,double等基础类型,也可能是某个结构体或者也可以是指针...
下面的代码
vector<vector<T>> table;for(vector<vector<T>>::iterator itrLine = table.begin(); itrLine != table.end(); ++itrLine){ itrLine.push_back(T); ... // 可能push任意个T // 假设内存是理想的,不会内存不足}// 我的疑问是// 1,这个循环结束了以后table还是正常的吗?// 2,假设初始化了足够多的元素...把push换成erase呢?//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() { p=(int **)malloc(4*sizeof(int *)); if (NULL==p) return; for (i=0;i<4;i++) { p[i]=(int *)malloc(5*sizeof(int)); if (NULL==p[i]) return; } for (i=0;i<4;i++) { for (j=0;j<5;j++) { p[i][j]=i*5+j; } } for (i=0;i<4;i++) { for (j=0;j<5;j++) { printf(" %2d",p[i][j]); } printf("\n"); } for (i=0;i<4;i++) { free(p[i]); } free(p);}// 0 1 2 3 4// 5 6 7 8 9// 10 11 12 13 14// 15 16 17 18 19
[解决办法]
么有错误。。。。一张二维表。。。。。table的首级指针去寻找table的vector<T>元素指针,然后元素指针对各个单vector进行操作
[解决办法]
table里面保存的实际都是vector<T>类型的指针,所以itrLine如何变化,对于迭代器来讲是没有关系的。
------解决方案--------------------
有人说如果不用迭代器,用下标遍历可能是正常的...如果是这样,请分别指出...
==是正常的,就把它想象成void **p; 指针吧。(如果结构体有动态申请内存,需自己管理释放)
[解决办法]
这段代码是没有问题的。
你自己实现一个简单版的vector就知道了。
[解决办法]
这个显然一点问题都没有,这要有问题,vector就没办法嵌套使用了
[解决办法]
完全没问题。
容器内元素的操作,跟容器本身的操作根本就冇一点点的关系,LZ的问题本身就是错的。