Khởi tạo một vectơ vectơ trong C++ vs2010

lập trình


Chào mọi người,

Tôi muốn khởi tạo một vectơ vectơ trong C++ vs2010
Tôi đã cố gắng khai báo một bảng đôi

dBảng đôi[3][4] = { 1,2,3,4,
5,6,7,8,
9,0,-1,-2};

và sau đó khai báo một vectơ của vectơ:
sử dụng không gian tên std;
vector < vector> vOfvs (&dtable[0][0]&dBảng[0][0]+63)

Tôi nhận được cảnh báo chuyển đổi c4244 từ gấp đôi sang chưa được chỉ định __int64
và một lỗi liên kết cho biết dTable đã được xác định

Cú pháp đúng cho điều này trong vs2010 là gì?

Cảm ơn!

Những gì tôi đã thử:

Tìm kiếm nó trên Google
Chạy trong trình chỉnh sửa khác

Giải pháp 1

Có cách trực tiếp mà không cần khai báo vectơ trợ giúp trước:

vector<vector<double> > myVector 
    { 
        /* Element 0 */
        {1, 2, 3, 4},  
        
        /* Element 1 */
        {5, 6, 7, 8},  
        
         /* Element 2 */
        {9, 10, 11, 12}  
    }; 

Thêm chi tiết bạn có thể tìm thấy cô ấy: Vector 2D trong C++ với kích thước do người dùng xác định – GeeksforGeeks[^]

Giải pháp 2

Vấn đề có lẽ là Visual Studio 2010 không hỗ trợ danh sách khởi tạo C++11 cho vectơ. Mặc dù tôi không thể kiểm tra bằng VS2010, nhưng tôi có thể tưởng tượng rằng tác vụ này có thể được giải quyết bằng hàm mẫu. Ở đây, vectơ hai chiều được khởi tạo với các giá trị được xác định trước.

C++
template<typename T, size_t N, size_t M>
void initializeVector(std::vector<std::vector<T>>&targetVector, const T(&sourceArray)[N][M]) {
    for (size_t i = 0; i < N; ++i) {
        std::vector<T> row;
        for (size_t j = 0; j < M; ++j) {
            row.push_back(sourceArray[i][j]);
        }
        targetVector.push_back(row);
    }
}

Điều này sau đó có thể được sử dụng như sau:

C++
std::vector<std::vector<double>> myArray;
const double predefinedValues[3][3] = { 
    {1.0, 2.0, 3.0},
    {4.0, 5.0, 6.0},
    {7.0, 8.0, 9.0}
};

initializeVector(myArray, predefinedValues);

コメント

タイトルとURLをコピーしました