2015-07-20 38 views
1

當我遇到數據運算符時,我只是在閱讀有關向量。正在使用下面的示例數據運算符。STL向量運算符數據

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> myvector (5); 

    int* p = myvector.data(); 

    *p = 10; 
    ++p; 
    *p = 20; 
    p[2] = 100; 

    std::cout << "myvector contains:"; 
    for (unsigned i=0; i<myvector.size(); ++i) 
    std::cout << ' ' << myvector[i]; 
    std::cout << '\n'; 

    return 0; 
} 

輸出:

myvector contains: 10 20 0 100 0 

我的問題是,爲什麼在0 0F 100和100的位置向後移動一個位置。 爲:

  1. p相當於myvector[0]被給予值10
  2. ++p;現在pmyvector[1]給定值20
  3. 所以20後,100應該來,爲什麼有0
+4

這是更多的關於指針運算比'。數據()的VECTOR'''構件。 – Niall

+1

我認爲使用指針「p」出於兩個不同的目的會產生混淆。作爲「數組」和「迭代器」。 –

回答

7

因爲你已經突變p你這麼做的時候

++p 

所以這個操作

p[2] 

已經由1個指數偏移,因此這是因爲如果你沒有

p[2 + 1] 

來自產地人地址的p

+0

它是特定於索引被偏移的向量,因爲在C中,如果我們用數組做這件事,一切正常。 –

+2

@PaulSen'++ p'引入額外的偏移 –

+2

@PaulSen這與'std :: vector'沒有任何關係,只要您使用'data'訪問原始數組,就可以使用典型的數組和指針語義。 – CoryKramer

-1
p point myvector[0] 
++p 
p point myvecotr[1] 
p[2] point myvector[2 + 1] 
so myvector[3] === p[2] === 100