0

C++ の std :: vector は、連続したメモリ位置にオブジェクトを格納します。しかし、住所を印刷すると、これが起こらないことがわかります。理由を教えてください。コードは次のとおりです。

#include <iostream>
#include <vector>
using namespace std;
class a
{

     int val1;

};
vector<a> records(10);
int main()
{
     int i;
     for(i=0;i<12;i++)
         cerr<<"address"<<i<<"="<<&records[i]<<endl;
}

私が得る出力は、メモリ内で連続していません。

4

3 に答える 3

7

まず第一に、あなたが示すアドレス指定されたメモリは連続しています-単に整数のサイズはあなたのシステムでは4バイトのようです。

また、ベクトルのサイズは10で、最大12のアドレスを出力します。ただし、ベクトルのメモリ割り当て戦略のおかげで、これは問題になりません。もっと注意する必要があることを覚えておいてください。

于 2012-06-28T06:16:53.610 に答える
3

アドレスは、クラスAのサイズによって互いにオフセットされます。

于 2012-06-28T06:15:55.903 に答える
2

システムでは、すべてintのサイズが4バイトであるためです。

于 2012-06-28T06:15:39.517 に答える