向量括号语法与迭代器

时间:2012-07-02 08:21:52

标签: 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;
  }

然而打印出来,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;
} 

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:2)

每次使用push_back时,都会在矢量末尾附加创建 new 元素。

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