如何借助algorithm库用更简洁代码打印vector<vector<int>>?(不新增代码/重载运算符)
简化二维vector的打印(借助Algorithm库)
当然可以!我们可以利用标准库中的<algorithm>和<iterator>组件,写出更简洁的二维vector<vector<int>>打印逻辑,完全不需要编写自定义函数或重载运算符。
优化后的打印代码
首先需要确保包含<iterator>头文件(因为要用到std::ostream_iterator),然后可以把原有的嵌套循环替换为以下代码:
#include <iterator> // 新增头文件 // ... 前面的代码保持不变 ... for_each(v1.begin(), v1.end(), [&](const auto& row) { copy(row.begin(), row.end(), ostream_iterator<int>(cout, " ")); cout << endl; });
代码解释
std::for_each:遍历二维vector的每一行,对每一行执行传入的lambda表达式。std::copy:将当前行的所有元素复制到输出迭代器std::ostream_iterator中,这个迭代器会自动把每个int元素输出到cout,并在每个元素后添加指定的空格分隔符。- 最后通过
cout << endl;完成每行的换行,和原代码的输出格式完全一致。
完整示例代码
把所有部分整合起来,完整代码如下:
#include <iostream> #include <algorithm> #include <functional> #include <vector> #include <iterator> // 新增头文件 using namespace std; int main() { vector<vector<int>> v1 = { {1, 2}, {3, 4} }; vector<vector<int>> v2 = { {5, 6}, {7, 8} }; for (int i = 0; i < v1.size(); ++i) { transform(v1[i].begin(), v1[i].end(), v2[i].begin(), v1[i].begin(), plus<int>()); } // 简化后的打印逻辑 for_each(v1.begin(), v1.end(), [&](const auto& row) { copy(row.begin(), row.end(), ostream_iterator<int>(cout, " ")); cout << endl; }); }
执行这段代码后,输出和原代码完全相同:
6 8 10 12
内容的提问来源于stack exchange,提问作者bencemeszaros
相关产品推荐
相关产品推荐

