C++ 二维数组,无法成功填充数据。

C++ 二维数组,无法成功填充数据。,c++,C++,我正在使用下面的这个类 template<typename T> class array_2d { public: std::size_t data; std::size_t col_max; std::size_t row_max; std::vector<T> a; array_2d(std::size_t col, std::size_t row) : data(col*row), col_max(col), row_ma

我正在使用下面的这个类

template<typename T>
class array_2d 
{
public:
    std::size_t data;
    std::size_t col_max;
    std::size_t row_max;
    std::vector<T> a;

    array_2d(std::size_t col, std::size_t row) : data(col*row), col_max(col), row_max(row), a(data)
    {}

    T& operator()(std::size_t col, std::size_t row) 
    {
        assert(col_max > col && row_max > row);
        return a[col_max*col + row];
    }
};
模板
类数组
{
公众:
标准:尺寸数据;
标准:最大尺寸;
标准::行大小\u最大值;
std::载体a;
数组2d(标准::大小列,标准::大小列):数据(列*行),列最大值(列),行最大值(行),a(数据)
{}
运算符()(标准::大小列,标准::大小行)
{
断言(列最大值>列和行最大值>行);
返回一个[col_max*col+行];
}
};
并将其初始化为

    array_2d<CString> tableData(5, 2);
    for(int r = 0; r < 5; r++)
        for(int c = 0; c < 2; c++)
            tableData(r, c) = "Test";
array\u2dtabledata(5,2);
对于(int r=0;r<5;r++)
对于(int c=0;c<2;c++)
tableData(r,c)=“测试”;

并且不断地返回,我正在超越一个向量的边界。我已经尝试了几个小时来获得一个成功的二维CString阵列

Erm。。您的参数/参数顺序混淆了…

Erm。。您的参数/参数顺序混淆了…

tableData(c,r)=“Test”

表格数据(c,r)=“测试”表数据(r,c)=“测试”

vs

T&operator()(std::size\u T col,std::size\u T row)

那肯定不行。

tableData(r,c)=“Test”

vs

T&operator()(std::size\u T col,std::size\u T row)


那肯定不行。

你把自己搞糊涂了,把
r
c
混在一起了。请仔细阅读。我所知道的大多数二维数组API都希望首先是行号,然后是列号——您可能希望模板类遵循这种约定(您自己的代码似乎也希望如此)。我同意@Kerrek的观点,您最好使用“宽度”、“高度”、“x”和“y”等术语。这要清楚得多(至少对我来说是这样)。你把自己搞糊涂了,把
r
c
混在一起了。请仔细阅读。我所知道的大多数二维数组API都希望首先是行号,然后是列号——您可能希望模板类遵循这种约定(您自己的代码似乎也希望如此)。我同意@Kerrek的观点,您最好使用“宽度”、“高度”、“x”和“y”等术语。这要清楚得多(至少对我来说)。