簡體   English   中英

枚舉的C ++矩陣

[英]C++ matrix of enum

我有一個枚舉定義為

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 () {
  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&’

請幫忙。

你可以像這樣創建一個二維向量:

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));

您需要使用內部向量的副本初始化外部向量,以便具有矩形數據結構。 這個問題是不能保證矢量的所有長度都保持不變。 因此,將它包裝到類中以強制執行所需的不變量可能是明智的。

或者,您可以使用Boost multi_array ,它使用更好的API處理嵌套的std::vector

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM