重载<<并定义流操纵器 C++
overloading the << and defining a stream manipulator c++
我希望有人能就我遇到的一个特殊问题提供一些见解。我正在编写一个程序,它接受整数,将它们存储在一个向量中,并将大于999 -> 1,000的数字用逗号分隔符打印出来。
我的问题是……嗯,实际上,第二,我如何将一个向量传递给一个函数,第二,如果我想重载<<在幕后做这一切可能吗?类的全局函数,逗号:
template <class T>
string formatWithComma(T value){
stringstream ss;
locale commaLoc(locale(), new CommaNumPunc() );
ss.imbue(commaLoc);
ss << value;
return ss.str();
main()中的循环显示vector:
for (vector<unsigned int>::iterator i = integers.begin(); i != integers.end(); ++i){
cout << formatWithComma(*i) << " ";
}
将vector传递给函数可以这样做:
void foo(std::vector<T> &vector);
void foo(const std::vector<T> &vector);
通常需要传递(const)引用以避免复制vector
第一个问题
如何将向量传递给函数
直接传递即可。例如(假设函数模板):
template <typename T>
void processVector(const vector<T>& vec );
在main中,你可以这样调用
processVector<unsigned int> (integers); //an example instantiation
第二个问题:
如果我想重载<<在幕后做这一切可能吗?
是的,当然可能。看看如何重载<<
操作符从这些资源:MSDN过载<<操作员和重载<<运营商有关
和SO中的一堆资源:如何正确重载<<操作符
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 没有匹配的“运营商&lt;&lt;”