Tôi đang cố gắng làm việc với vectơ của vectơ ints cho bộ giải đố sudoku mà tôi đang viết.Làm cách nào để làm việc với vectơ lồng nhau trong C++?
Câu hỏi 1:
Nếu tôi sẽ truy cập vào một vector 2ngày của tôi bằng cách chỉ số, tôi phải khởi tạo nó với kích thước thích hợp đầu tiên?
Ví dụ:
typedef vector<vector<int> > array2d_t;
void readAPuzzle(array2d_t grid)
{
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
cin >> grid[i][j];
return;
}
int main()
{
array2d_t grid;
readAPuzzle(grid);
}
sẽ seg lỗi. Tôi cho rằng điều này là bởi vì nó đang cố gắng truy cập vào các tầng lớp chưa được khởi tạo?
Tôi đã hoán đổi dòng khai lưới với:
array2d_t grid(9, vector<int>(9, 0));
Và điều này dường như để thoát khỏi lỗi seg này. Đây có phải là cách đúng để xử lý nó?
Câu hỏi 2:
Tại sao khi tôi cố gắng đọc vào lưới của tôi từ cin, và sau đó in ra lưới điện, lưới điện là trống?
Tôi đang sử dụng đoạn mã sau để làm như vậy:
void printGrid(array2d_t grid)
{
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
cout << grid[i][j] + " ";
}
cout << endl;
}
}
void readAPuzzle(array2d_t grid)
{
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++)
cin >> grid[i][j];
return;
}
int main()
{
array2d_t grid(9, vector<int>(9, 0));
printGrid(grid);
readAPuzzle(grid);
printGrid(grid);
}
Và tôi cố gắng để chạy chương trình của tôi như:
./a.out < sudoku-test
đâu sudoku-test là một tập tin chứa những điều sau đây:
3 0 0 0 0 0 0 0 0
5 8 4 0 0 2 0 3 0
0 6 0 8 3 0 0 7 5
0 4 1 0 0 6 0 0 0
7 9 0 0 2 0 0 5 1
0 0 0 9 0 0 6 8 0
9 3 0 0 1 5 0 4 0
0 2 0 4 0 0 5 1 8
0 0 0 0 0 0 0 0 6
Cuộc gọi đầu tiên để inGrid() cung cấp một lưới trống, khi thay vào đó, tôi sẽ thấy lưới 9x9 0 vì đó là cách tôi khởi tạo nó. Cuộc gọi thứ hai nên chứa lưới ở trên. Tuy nhiên, cả hai lần trống.
Có ai có thể làm sáng tỏ điều này không?
thanh toán boost.multi_array nếu bạn muốn cách dễ dàng hơn để đối phó với các dữ liệu đa chiều động – Anycorn