0

为什么下面的代码块重复打印出“40”,

vector<Square> array(81);

char c;
int d;

int i = 0;

for(c='A'; c<'J'; c=c+1)
  for(d=1; d<10; d++)
    array.push_back( Square(c, d));

for(int i = 0; i<81; i++)
  cout << array[i].column << array[i].row << endl;
  }

而这打印出来, A1, A2, A3, .... , I9

vector<Square> array(81);

char c;
int d;

int i = 0;

for(c='A'; c<'J'; c=c+1)
  for(d=1; d<10; d++)
    array[i++] = ( Square(c, d));

for(i = 0; i<81; i++)
  cout << array[i].column << array[i].row << endl;
} 

推回是否将其放入必须通过迭代器访问的随机内存中?在查看向量时总是使用迭代器会更好吗?

4

2 回答 2

8

vector<Square> array(81);声明一个包含 81 个元素的向量。当您push_back插入新元素时,即使用的大小将增加到 82、83、...,而您现有的元素将保持不变。

所以 - 在你的第一个片段中,你打印出vector任何push_backs 之前的元素。第二个片段将元素替换为您想要的元素。

于 2012-07-02T08:23:56.077 回答
2

每次使用 时push_back,都会创建一个附加到向量末尾的新元素。

如果您希望您的第一个代码示例正常工作,您应该避免设置向量大小,并将其声明为vector<square> array;

于 2012-07-02T08:32:46.120 回答