2016-08-27 264 views
-5

我是新來的C++和嘗試理解向量,我的要求是比較兩個向量中的每個索引的值。比較兩個向量的元素

下面是一個適用於陣列而不是標準的矢量類,陣列的大小可通過

mySize = sizeof(array)/sizeof(int); 

for(int i = 0;i<mySize;i++) 
{ 
    if(a[i] == b[i]) 
    { 
    std::cout <<": Match "; 
    } 
    else 
    { 
    std::cout <<":Doesnt Match" ; 
    } 

} 

但同時IAM試圖使用矢量計算出的僞碼,它不是簡單

1.基於範圍的循環適用於上述場景嗎? 2.如何獲得向量的大小,下面的代碼實際上是顯示出比我創建了額外的內存, 可能的std ::向量獸醫默認的意見後,分配額外的空間

std::vector<int> vec; 
vec.push_back(-10); 
vec.push_back(-20); 
vec.push_back(-20); 
vec.push_back(-20); 
vec.push_back(-20); 
for (int i=0;i<sizeof(vec);i++) 
{ 
    std::cout<<vec[i]<<"\t";  
} 

output : 

10 -20 -20 -20 -20 0 0 0 0 0 0 0 0 0 0 0 0 0  0 0 0 0 0 0 

代碼更新

std::vector<int> vec; 
vec.push_back(-10); 
vec.push_back(-20); 
vec.push_back(-20); 
vec.push_back(-20); 
vec.push_back(-20) 

std::vector<int> vec1; 
vec1.push_back(-20); 
vec1.push_back(-20); 
vec1.push_back(-20); 
vec1.push_back(-20); 

for (int i=0;i<vec.size();i++) 
{ 
    if(vec[i] == vec1[i]) 
    { 
     std::cout<<vec[i]<<"\t"<<vec1[i]<<": Match: \n"; 
    } 
    else { 
     std::cout<<vec[i]<<"\t"<<vec1[i]<<":Doesnt Match: \n"; 
    } 

} 

輸出

-10 -20:Doesnt Match: 
-20 -20: Match: 
-20 -20: Match: 
-20 -20: Match: 
-20 -20: Match: 

這裏打印的輸出實際上是錯誤的,因爲我們只需要在第二矢量4層的元件,但輸出顯示它有5個元素。 有何建議?

+1

閱讀文檔。 http://www.cplusplus.com/reference/vector/vector/ – Chris

+4

'if(v1 == v2)'should work。 –

+2

使用'vec.size()'而不是'sizeof(vec)' – DimChtz

回答

2

std::vector定義operator ==,所以你可以對它們進行比較:

if (a == b) 
    { 
    std::cout <<": Match "; 
    } 
    else 
    { 
    std::cout <<":Doesnt Match" ; 
    } 

如果你仍然想每個元素比較 -

  • 要獲得vector的大小,你做vec.size() ,而不是sizeof

  • 但首先比較兩個向量的大小。如果它不相同,那麼載體顯然不一樣。

+0

我如何得到這些向量的大小來比較每個索引。 for循環迭代兩個向量 – LearningCpp

+0

回答更新。你需要'vec.size()' – rustyx

+0

for(int i = 0; i LearningCpp

0

您必須使用vec.at(i)而不是vec[i]。因爲在第二種情況下,當索引爲i=4時,您將調用矢量vec1中不存在的元素,只有4個元素[0,1,2,3]。這種操作的結果是不確定的! 如果您將使用vec.at(i)函數,除了矢量數組邊界之外,它將不允許使用。

此外,for循環是錯誤的,你將不得不從編譯器得到一個關於它的警告。 爲載體,應該是這樣的:

for(vector<int>::size_type i=0; i<vec.size(); ++i) { .... }