2014-12-14 15 views
8

Stworzyłem dwa wektory i wypełniłem drugie push_back, a drugie indeksami. Spodziewałbym się, że będą równe, ale nie są. Czy ktoś może mi wyjaśnić, dlaczego tak jest?Dlaczego te wektory nie są równe?

#include <vector> 
#include <iostream> 

using namespace std; 

int main() { 

    vector<int> v0; 
    v0.push_back(0); 
    v0.push_back(1); 
    v0.push_back(2); 

    vector<int> v1; 
    v1.reserve(3); 
    v1[0] = 0; 
    v1[1] = 1; 
    v1[2] = 2; 

    if (v0 != v1) { 
      cout << "why aren't they equal?" << endl; 
    } 

    return 0; 
} 
+6

try Resize. to, co napisałeś, to UB – sp2danny

+0

Nie możesz porównywać takich wektorów. Wektory mają metodę, która pozwala na porównanie. –

+0

Tuż przed twoim 'if' spróbuj coś jak' cout << v1.size(); '(i może' v0.size() ') i zobacz, czy nie daje wskazania, dlaczego nie są równe. –

Odpowiedz

8
vector<int> v1; 
v1.reserve(3); 
v1[0] = 0; 
v1[1] = 1; 
v1[2] = 2; 

Jest to prawdopodobnie niezdefiniowane zachowanie (choć nie jestem pewien, czy jest zależna od implementacji).

Nie można użyć operator[] do zapełnienia wektora, ponieważ zwraca on odnośnik do obiektu leżącego pod spodem, który w twoim przypadku jest niczym innym jak wiązką bitów.

Należy użyć push_back() lub po prostu resize swoją vector.Using ostatni: -

vector<int> v1; 
v1.resize(3); 
v1[0] = 0; 
v1[1] = 1; 
v1[2] = 2; 
Powiązane problemy