我有一个枚举定义为
enum my_type_t {
UNKNOWN, TYPE1, TYPE2
};
我想声明一个矩阵,其中两个维度 num_of_edges
和 num_of_nodes
由用户在运行时提供。我还想通过引用被调用函数来传递矩阵。
我已将矩阵声明为
vector< vector<my_type_t> > my_matrix(num_of_edges, vector<my_type_t> (num_of_nodes, UNKNOWN));
我是这样从main传过来的
main () {
int edge1 = 5;
int node1 = 10;
my_function(i, j, my_matrix);
i = 12;
j = 4;
my_function(i, j, my_matrix);
}
my_function
的声明是
void my_function(int i, int j, vector< vector<my_type_t> >& my_matrix) {
// some code
if (my_condition == true)
my_matrix[i][j] = TYPE1;
else
my_matrix[i][j] = TYPE2;
// some other code
}
我收到以下编译器错误:
no known conversion for argument 4 from std::vector<std::vector<my_type_t> >’ to ‘int&’
请帮忙。
最佳答案
您可以像这样创建一个二维 vector :
size_t num_rows = 10;
size_t num_cols = 20;
std::vector<std::vector<my_type_t>> matrix(num_rows, std::vector<my_type_t>(num_cols));
为了拥有矩形数据结构,您需要使用内部 vector 的拷贝来初始化外部 vector 。这样做的问题是不能保证 vector 的所有长度都保持不变。因此,将其包装到一个类中以强制执行您想要的不变量可能是明智的。
或者,您可以使用 Boost multi_array
,它使用更好的 API 处理嵌套的 std::vector
。
关于枚举的 C++ 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51807633/