您可以使用std :: function来访问每个元素(列或行)和枚举器。
#include <iostream>
#include <vector>
#include <functional>
typedef std::vector<std::vector<int>> TTable;
void enumerateColumn(size_t column, TTable & table, std::function<void(int&, size_t)> op)
{
for(size_t index = 0; index < table.size(); ++index)
{
op(table[index][column], index);
}
}
void enumerateRow(size_t row, TTable & table, std::function<void(int&, size_t)> op)
{
auto& row_tab = table[row];
for (size_t index = 0; index < row_tab.size(); ++index)
{
op(row_tab[index], index);
}
}
int main()
{
TTable table =
{
{ 1,2,3 },
{ 4,5,6 },
{ 7,8,9 }
};
std::cout << "Show Column: " << 2 << std::endl;
enumerateColumn(2, table, [] (int& val, size_t index)
{
std::cout << "Index: "<< index <<" Value: "<< val << std::endl;
});
std::cout << "Show Row: " << 1 << std::endl;
enumerateRow(1, table, [] (int& val, size_t index)
{
std::cout << "Index: " << index << " Value: " << val << std::endl;
});
std::cout << "Change Column: " << 0 << std::endl;
enumerateColumn(0, table, [] (int& val, size_t index)
{
val = 10 * (index + 1);
});
std::cout << "Change Row: " << 2 << std::endl;
enumerateRow(2, table, [] (int& val, size_t index)
{
val = 100 * (index + 1);
});
return 0;
}
输出:
Show Column: 2
Index: 0 Value: 3
Index: 1 Value: 6
Index: 2 Value: 9
Show Row: 1
Index: 0 Value: 4
Index: 1 Value: 5
Index: 2 Value: 6
Change Column: 0
Change Row: 2
enumerateColumn和enumerateRow功能访问请求行或列中的每个值。为了实现这个迭代,你只需要设置所需的行/列索引。每个列/行值都会调用std :: function,所以你可以在里面进行任何操作。使用这种方法,您可以“隐藏”行/列迭代的机制,只需轻松访问每个行/列元素即可。
最后2次操作后,结果表将有下一个值:
10 2 3
20 5 6
100 200 300
你尝试过什么?如果是这样,发布。 –
[This](http://stackoverflow.com/questions/14924912/computing-column-sums-of-matrix-vectorvectordouble-with-iterators)可能会帮助你的方式。请注意,如果您使用的是矩阵,您应该只需要一个矩阵库。他们已经完成了所有这些工作。 – NathanOliver