3

这里的答案是:

来自 n2798(C++0x 草案):向量的元素是连续存储的,这意味着如果 v 是一个向量,其中 T 是 bool 以外的某种类型,那么它遵循恒等式 &v[n] == &v[0 ] + n 对于所有 0 <= 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;
  }
}

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

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

4

2 回答 2

3

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

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

于 2012-12-22T17:59:17.000 回答
0

向量可以很容易地连续存储,因为它们的元素不在它们自己内部,而是在空闲存储的一些内存中。由 指定的对象的大小sizeof编译时常量表达式,这些是连续存储的位。

于 2012-12-22T17:42:26.067 回答