向量括号语法与迭代器

ord*_*ary 0 c++ vector

为什么以下代码块重复打印出"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;
  }
Run Code Online (Sandbox Code Playgroud)

而这打印出来,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;
} 
Run Code Online (Sandbox Code Playgroud)

推回是否将它放在必须通过迭代器访问的随机存储器中?在浏览向量时总是使用迭代器是否更好?

Luc*_*ore 8

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

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