2012-07-02 46 views
0

爲什麼以下代碼塊打印出 「40」 反覆,矢量括號語法VS迭代

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; 
} 

是否推回到必須通過迭代器訪問的隨機存儲器中?在查看矢量時總是使用迭代器更好嗎?

+0

沒有其他人提到,你可能一直在試圖實現與'陣列(81 );'可以用'reserve(81);'完成。 http://en.cppreference.com/w/cpp/container/vector/reserve – BoBTFish

回答

8

vector<Square> array(81);聲明一個包含81個元素的向量。當您插入新元素時,即使用的大小將增加到82,83,...,並且您的現有元素將保持不變。

因此 - 在您的第一個片段中,您可以打印vector中的任何push_back之前的元素。第二個片段用你想要的元素替換元素。

+0

啊!當然,謝謝。 – ordinary

2

每次使用push_back時,都會創建一個新的元素附加到該向量的末尾。

如果你希望你的第一個代碼示例正常工作,你應該避免設置矢量大小,並宣佈它爲vector<square> array;