如何到达2d std :: vector的第N个元素(`std :: vector&lt; std :: vector <t>&gt;`)?</t>

时间:2011-11-11 13:11:58

标签: c++ stl vector matrix std

我们得到了一些int el_position数字,这是我们的元素在我们的二维向量(std::vector< std::vector<int> > matrix(5, std::vector<int>(4)))的flatened表示中所需的位置。

如果我们有这样的矩阵

的意思
11 21 31 41 51
61 71 81 91 101

我们获得了el_position == 7我们需要获得第二行的第二个元素。是否有可能用stl 2d向量做这样的事情?如何通过给定其在扁平数组中的位置来获得元素的值?

4 个答案:

答案 0 :(得分:4)

当然有可能:

 row = el_position % row_length;
 col = el_position / row_length;

答案 1 :(得分:3)

size_t size_y = matrix.front().size(); // to get your Y dimension
return matrix[el_position / size_y][el_position % size_y];

答案 2 :(得分:2)

您只需获取一个n/W索引,另一个索引n%W,其中W是宽度(或行长,无论如何)。请注意,实际上在向量向量中,您可能有不同长度的向量,因此您可以自行解决问题。

答案 3 :(得分:1)

// Assuming fixed dimensions:
matrix[el_position/size][el_position%size];

/是整数除法,因此计算我们必须传递的完整行数以找到我们正在查找的行,%是整数除法的余数,因此找到了多远我们应该进入行。

如果你的一个内部向量大小不同,则会失败。您可以使用两个断言检查此假设:

assert(matrix.size()); // needed for the front element to be valid
assert(std::count(matrix.begin(), matrix.end(), matrix.front().size())
       == matrix.size()); // the count will be the number of elements 
                          // if it's correct