向量的向量是如何工作的

How do vectors of vectors work?

本文关键字:向量 工作 何工作      更新时间:2023-10-16

这里的答案是:

来自n2798 (c++ 0x草案):向量的元素是连续存储的,这意味着如果v是一个T不是bool类型的向量,那么它服从== &v[0] == &v[0] + n =所有0 <= n #include <iostream> #include <vector> #include <iterator> using namespace std; int main(){ int k; cin >> k; cout << endl << "k = " << k << endl; ostream_iterator<int> oi(cout, " "); vector<vector<int> > vpi; while(k--) { vpi.push_back(vector<int>(istream_iterator<int>(cin), istream_iterator<int>())); cin.clear(); cout<<"k = "<< k <<endl; copy(vpi[vpi.size()-1].begin(), vpi[vpi.size()-1].end(), oi); cout<<endl; } }

当vector的元素必须具有相等的大小,且要存储的vector的大小事先未知时,vector如何连续存储vector ?

我很抱歉,如果这个已经问过了,我找不到它,如果是这种情况,请给我一个链接。

std::vector是一个固定大小的小对象。通常的实现包括三个指针或一个指针和一对整数大小(用于当前大小和已分配容量)。vector对象的内容不存储在vector对象本身中,而是存储在使用vector的分配器(默认为标准堆分配器)分配的内存中。

所以向量的向量是一个小对象,通常是三个指针的大小。它内部的向量是堆中某个连续内存中的小对象。这些内部向量的内容在堆的其他地方

vector可以很容易地连续存储,因为vector的元素不是在vector本身内部,而是在自由存储区中的一些内存中。sizeof规定的对象的大小为编译时常量表达式,这些是连续存储的位。