向量载体如何工作?

时间:2012-12-22 17:40:12

标签: c++ stl vector

答案here说:

  

从n2798(C ++ 0x草案):   向量的元素是连续存储的,这意味着如果v是   一个向量,其中T是除bool之外的某种类型,然后它服从   对于所有0< = n< 0< = n< n< = n< n< n< v.size()。

该计划有效:

#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;
  }
}

当向量的元素必须具有相同的大小并且要存储的向量的大小事先不知道时,向量如何连续存储向量?

如果之前有人问过我道歉,我找不到,如果是这种情况,请给我一个链接。

2 个答案:

答案 0 :(得分:3)

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

因此矢量矢量是一个小对象,通常是三个指针的大小。其中的向量是堆中某处的连续内存中的小对象。这些内部向量的内容位于堆中的其他位置。

答案 1 :(得分:0)

矢量可以很容易地连续存储,因为它们的元素不在自身内,而是在免费商店的某些内存中。 sizeof指定的对象大小为编译时常量表达式,这些是连续存储的位。