如何使得cout格式的配置作用于所有元素?

如何使得cout格式的配置作用于所有元素?

我重载了<<运算符,想要使得打印vector时更方便,如下面的代码,但是当我想要调整vector中每个元素的格式时,发现只有第一个元素的格式如我所愿,后面的元素的格式又恢复为默认的了。请问如何使得格式的配置作用于所有元素?

问题相关代码,请勿粘贴截图

#include <iostream>
#include <iomanip>
#include <vector>

using namespace std;

template <typename T>
ostream &operator<<(ostream &out, const vector<T> &rhs) {
    for (const auto &val : rhs) {
        out << val << " ";
    }
    return out;
}

int main() {
    vector<int> a = {5, 6, 7};
    cout << a << endl;
    cout << setw(5) << a << endl;
    cout.width(5);
    cout << a << endl;
    return 0;
}

运行结果及报错内容

5 6 7
5 6 7
5 6 7

我想要达到的结果
5     6     7

setw只对下一次输出有效,你可以把它加到函数的循环里。

参考:


C++ STL std::setw 中文文档 https://noerror.net/zh/cpp/io/manip/setw.html

楼主可能对setw有误解。

如果想达到目的,可以考虑在11行代码这里修改,每一次的输出来限制位宽:

#include <iostream>
#include <iomanip>
#include <vector>
 
using namespace std;
 
template <typename T>
ostream &operator<<(ostream &out, const vector<T> &rhs) {
    for (const auto &val : rhs) {
        out << setw(5) << val;
    }
    return out;
}
 
int main() {
    vector<int> a = {5, 6, 7};
    cout << a << endl;
    return 0;
}

这里的宽度5如果想要参数化,用一个全局变量就可以了。

cout 是C++中 ostream 类型的对象,该类被封装在 < iostream > 库中,该库定义的名字都在命名空间 std 中,所以 cout 全称是 std::cout 。本文重点给大家介绍C++中cout的格式使用,需要的朋友参考下吧
1.cout和i/i++/++i的组合使用
i++ 和 ++i 是有着不同的含义,和 cout 组合使用也会得到不同的结果,下面给出一段代码:
#include
using namespace std;
int main(){
int i = 1;
cout << ++i << i++ << i << i++ << ++i << endl;
return 0;
}
这段代码的结果是多少呢?
A.23345
B.22335
C.54535
D.53525