You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:39:23