2014-06-16 15 views
5

Tôi đang cố gắng tạo lưới có bậc hai với các ô có số tăng dần.sự cố khi khởi tạo vec tơ vectơ của loại tự động inc

#include <iostream> 
#include <vector> 

class Simple 
{ 
public: 
    Simple(): id(genId()) {} 
    static int genId() 
    { 
     static int g_id = 0; 
     return ++g_id; 
    } 
    int id; 
}; 

typedef std::vector< std::vector<Simple> > SimpleGrid; 

void printSimpleGrid(SimpleGrid& grid) 
{ 
    for(int i = 0; i < grid.size(); i++) { 
     for(int j = 0; j < grid[i].size(); j++) { 
      std::cout << grid[i][j].id << " "; 
     } 
     std::cout << std::endl; 
    } 
} 

int main() 
{ 
    int dim = 3; 
    SimpleGrid test(dim); 
    for (int i=0; i<dim; i++) { 
     std::vector<Simple> row(dim); 
     test[i] = row; 
    } 
    printSimpleGrid(test); 
    return 0; 
} 

tôi nhận được kết quả này:

1 1 1 
2 2 2 
3 3 3 

đó khác với những gì tôi mong đợi:

1 2 3 
4 5 6 
7 8 9 

Tôi đang làm gì sai?

(Tôi đang sử dụng Code :: Blocks 12,11 rev 8629 với SDK phiên bản 1.13.14)

+0

Bạn có chắc chắn về điều đó không? Bởi vì tôi nhận được kết quả chính xác http://coliru.stacked-crooked.com/a/ba4517515949b7db – 101010

+0

@ 40two Có, tôi chỉ cần sao chép nó. Có lẽ nó chỉ là một lỗi trong phiên bản SDK của tôi. ... nhờ lời nhắc Coliru :) – Wolf

+0

Có lẽ vì tôi cũng nhận được kết quả chính xác với VC++ 2013. – 101010

Trả lời

8

cũ/C++ 03 trình biên dịch sẽ thấy điều này ...

std::vector<Simple> row(dim); 

... và kết hợp nó với tình trạng quá tải này của các nhà xây dựng ...

explicit vector(size_type count, 
      const T& value = T(), 
      const Allocator& alloc = Allocator()); 

... tạo ra một Simple đối tượng nguyên mẫu cho các đối số nhà xây dựng thứ hai sau đó được sao chép vào mỗi dim vector các yếu tố.

Mới/C++ 11 trình biên dịch sẽ thay phù hợp với tình trạng quá tải này ...

explicit vector(size_type count); 

... sau đó tiến hành để gọi constructor dim lần để tạo ra các yếu tố.

Chi tiết here

+0

+1 (acc) Cảm ơn bạn đã làm rõ điều này. – Wolf

1

Ngoài Tony D's great answer, ở đây sau tôi hạnh phúc cuối. Trong các thiết lập IDE, tôi cho phép tuân thủ C++ 11 cho trình biên dịch. Gói Code :: Blocks 12.11 rõ ràng không chỉ hỗ trợ một tiêu chuẩn:

enter image description here

Các vấn đề liên quan