我们得到了一些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向量做这样的事情?如何通过给定其在扁平数组中的位置来获得元素的值?
答案 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