枚举的 C++ 矩阵

标签 c++ matrix enums

我有一个枚举定义为

enum my_type_t {
  UNKNOWN, TYPE1, TYPE2
};

我想声明一个矩阵,其中两个维度 num_of_edgesnum_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/

相关文章:

OpenCV Mat 每个元素操作 : vector-matrix multiplication

Python:将矩阵转换为半正定

c# - 如何设置 try-catch 以确保用户输入的值包含在枚举列表中?

c++ - 从文件中读取字符串。 QTextStream 不读取文件

android - 通过 ndk-build 构建 libcryptopp.a 时没有存档符号表(运行 ranlib)

matrix - gnuplot 矩阵或绘图 : display both color and point value

c# - 获取数组中的枚举元素

Python enum34 按名称访问

android - 如何在 vs-android 构建中启用 c++0x

c++ - 在 Qt4 中隐藏 QMenuBar 的条目?