2014-12-14 18 views
8

Tôi đã tạo hai vectơ và điền một vectơ khác với push_back và một cái còn lại có chỉ mục. Tôi mong đợi những điều này sẽ bằng nhau nhưng không. Ai đó có thể giải thích cho tôi tại sao điều này?Tại sao các vectơ này không bằng nhau?

#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

thử thay đổi kích thước. những gì bạn đã viết là UB – sp2danny

+0

Bạn không thể so sánh các vectơ như thế. Vectơ có một phương pháp cho phép so sánh. –

+0

Ngay trước khi 'if' thử một cái gì đó như' cout << v1.size(); '(và có thể' v0.size() ') và xem nó có đưa ra một số dấu hiệu về lý do tại sao chúng không bằng nhau. –

Trả lời

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

Đây có lẽ là một hành vi không xác định (mặc dù không chắc chắn nếu nó thực hiện phụ thuộc).

Bạn không thể sử dụng operator[] để điền vào vectơ khi nó trả về tham chiếu đến đối tượng bên dưới, trong trường hợp của bạn không có gì khác ngoài bó bit.

Bạn nên sử dụng một trong hai push_back() HOẶC chỉ resize vector.Using của bạn sau: -

vector<int> v1; 
v1.resize(3); 
v1[0] = 0; 
v1[1] = 1; 
v1[2] = 2; 
Các vấn đề liên quan