关于C++中vector< vector<int> >的含义.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C++中vector< vector<int> >的含义.相关的知识,希望对你有一定的参考价值。
vector< vector<int> > vvec;
的意思是:定义了一个vector,这个vector的element也是一个vector,那么我要问的是,对于内层的vector<int>,编译系统知道每个element的size为sizeof(int),而对于外层的,它知道element的size是什么吗???
问题的意思就是,假如对于定义一个一维数组:
int a[10];
编译系统通过int知道了size,于是可以操纵存储空间.
若定义一个二维数组,
int a[8][10];
编译系统通过定义中的第一维大小"[10]"知道a是一个数组,每个元素大小是10*sizeof(int),所以可以操作存储空间.
而对于vector< vector<int> >来说,外层的vector可以动态增加存储空间,那么如何知道增加一个元素需要增加多少存储空间呢?意思就是,内层的也动态,外层的也动态,内层的知道增加一个是增加sizeof(int),而外层不知道内层有多少个元素,它增加时是增加多少个sizeof(int)呢?意思就是上面例子中的二维数组中的那个"[10]"是从哪知道的呢?
我看的是英文原版的<<C++ Primer>>,我知道vector喝array有在run time动态增加的区别...拿array举例子是为了说明我的不解之处.我看到Page 93了,这只有道习题,并没有深入讲解vector< vector<int> >的过程是怎样的...过程是什么???
而对于2维向量,的确定义二维的时候不知道1维所占用的空间大小。因此可以断定的是里面有大量的数据移动操作。在清华大学出版的程序语言设计基础里面对一个例子进行分析的时候说过2维向量操作要耗费大量的时间在数据的重排上,不提供从前面插入的函数接口而推荐用堆栈,因此可以推测,里面是采用的动态分配和数据移动来完成和保证的二维vector的读写 可以推测在数据量较大的时候添加新的数据操作会比较慢。 参考技术A 外层增加的是若干个vector<>,就其内部实现来讲,每个vector<>里面肯定有一个指针指向它所管理的那堆元素,但其自身大小也就是sizeof(vector<>)是固定的,所以外层增元素时很清楚要申请多大的空间。 参考技术B 有什么难理解的啊?就是 容器的每个元素又是一个容器而已 就这么简单 参考技术C uwinb 说的不错,不过vector 有两个指针,一个头一个尾,呵呵
昨天我才看了,
楼主去看一下vector的代码就知道了本回答被提问者和网友采纳
C++ 模板类中使用vector
// class templates #include <iostream> #include <vector> using namespace std; template <class T> class mypair static vector<T> v ; public: mypair (T first, T second) v.push_back(first); v.push_back(second); T getmax (); ; template <class T> T mypair<T>::getmax () T retval; retval = v[1]>v[0]? v[1] :v[0] ; return retval; int main () mypair <int> myobject (100, 75); cout << myobject.getmax(); return 0; 想在模板类mypair里使用vector, 怎样才是正确的使用方法?
参考技术A staticvector<T>
v
;
改成
vector<T>
v;
你的程序其他地方是正确的
以上是关于关于C++中vector< vector<int> >的含义.的主要内容,如果未能解决你的问题,请参考以下文章