首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >重载operator<<以用于字符串

重载operator<<以用于字符串
EN

Stack Overflow用户
提问于 2010-07-14 10:06:36
回答 3查看 254关注 0票数 1

在以下代码中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 using namespace std;

 //ostream& operator<< (ostream& out,const string & str)
 //{    
 //  out << str.c_str();    
 //  return out; 
 //}

 int _tmain(int argc, _TCHAR* argv[])
 {

     ofstream file("file.out");  

     vector<string> test(2); 

     test[0] = "str1"; 
     test[1] = "str2";
     ostream_iterator<string> sIt(file);

     copy(test.begin(), test.end(), sIt);

     file.close();
    return 0;
}

重载operator <<以使copy(test.begin(), test.end(), sIt);正常工作的正确方法是什么?

我遗漏了什么?

编辑:我就是太傻了。忘记包含"string“标头

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-14 10:13:21

你不需要重载operator<<来处理字符串,它已经知道如何处理它们了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::copy( test.begin(), test.end(), 
           std::ostream_iterator<std::string>( file, "\n" ) );

将产生:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
str1
str2

你想在那里做些什么不同/特别的事情吗?

票数 6
EN

Stack Overflow用户

发布于 2010-07-14 10:40:48

正如David已经指出的,字符串已经有了一个operator<<,所以您不必提供一个。如果你真的想要定义自己的重载,那就有一个小问题,因为实际上你不允许这样做。operator<<是在std名称空间中定义的,所以如果您希望std::string有一个可用的重载(大多数实现中的版本是一个模板函数,因此存在潜在的重载),您也必须在std名称空间中这样做(这是因为在C++中解决歧义和重载的方式,这里有一些注意事项)。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
namespace std {
 ostream& operator<< (ostream& out,const string & str)
  {     
    out << "A STRINGY:" << str.c_str();     
    return out; 
  }
}

但是,普通用户不允许将内容添加到std名称空间中,因为它可能具有不可预见的特定于实现的效果,并可能破坏标准库中的所有内容。此外,不能保证您的标准库实现具有可重载的operator<<。这意味着,它可以工作,也可以不工作。

票数 2
EN

Stack Overflow用户

发布于 2010-07-14 12:29:55

让我只添加来自cplusplus.com的链接,以供将来参考

http://www.cplusplus.com/reference/algorithm/copy/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3245099

复制
相关文章
operator重载之复数计算—C++
/* 功能:复数计算类 作者:wind 日期:2013-11-29 */ #include <iostream> #include <string> using namespace std; /************************************************************/ class Complex { public: Complex() { m_iX = 0; m_iY = 0; } Complex(double aX,double aY);
WindCoder
2018/09/19
6010
C++类对象排序operator重载操作
类内默认含有this指针,bool operator==(const T& a) 类外则需要写两个参数,bool operator==(const T& a, const T& b) class People { public: string name; int id; People(string n, int i):name(n),id(i){} bool operator==(const People& a) { return id ==
Michael阿明
2020/07/13
5850
operator重载之矩阵的运算—C++
/* 功能:矩阵的运算 作者:wind 日期:2013-11-29 */ #include <iostream> #include <string> using namespace std; /************************************************************/ class Reckle { public: Reckle() { m_iA = 0; m_iB = 0; m_iC = 0; m_iD = 0; } void set(
WindCoder
2018/09/19
5830
Dart 点将台 | operator 运算符重载
@charset "UTF-8";.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1:first-child,.markdown-body h2:first-child,.markdown-body h3:first-child,.markdown-body h4:first-child,.markdown-body h5:first-child,.markdown-body h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.markdown-body h1:before,.markdown-body h2:before,.markdown-body h3:before,.markdown-body h4:before,.markdown-body h5:before,.markdown-body h6:before{content:"#";display:inline-block;color:#3eaf7c;padding-right:.23em}.markdown-body h1{position:relative;font-size:2.5rem;margin-bottom:5px}.markdown-body h1:before{font-size:2.5rem}.markdown-body h2{padding-bottom:.5rem;font-size:2.2rem;border-bottom:1px solid #ececec}.markdown-body h3{font-size:1.5rem;padding-bottom:0}.markdown-body h4{font-size:1.25rem}.markdown-body h5{font-size:1rem}.markdown-body h6{margin-top:5px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body strong{color:#3eaf7c}.markdown-body img{max-width:100%;border-radius:2px;display:block;margin:auto;border:3px solid rgba(62,175,124,.2)}.markdown-body hr{border:none;border-top:1px solid #3eaf7c;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;overflow-x:auto;padding:.2rem .5rem;margin:0;color:#3eaf7c;font-weight:700;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75;border-radius:6px;border:2px solid #3eaf7c}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{font-weight:500;text-decoration:none;color:#3eaf7c}.markdown-body a:active,.ma
张风捷特烈
2021/03/02
5280
Dart 点将台 | operator 运算符重载
operator重载之三维坐标计算—C++
/* 功能:三维坐标计算 作者:wind 日期:2013-11-29 */ #include <iostream> #include <string> using namespace std; /************************************************************/ class Point { public: Point() { m_iX = 0; m_iY = 0; m_iZ = 0; } void set(double aX,dou
WindCoder
2018/09/20
8090
从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载
该文章介绍了如何重载运算符在C++中,包括成员函数重载和友元函数重载。作者通过一个具体的实例,展示了如何重载加法运算符以实现两个复杂类型的加法操作。同时,文章还介绍了如何实现其他运算符的重载,如赋值运算符、自增运算符等。
s1mba
2017/12/28
9740
从零开始学C++之运算符重载(四):类型转换运算符、*运算符重载、->运算符重载、operator new 和 operator delete
该文摘要总结
s1mba
2017/12/28
6620
从零开始学C++之运算符重载(四):类型转换运算符、*运算符重载、->运算符重载、operator new 和 operator delete
C++编程语言中重载运算符(operator)介绍「建议收藏」
本文主要介绍在 C++ 编程语言中使用关键字 operator 重载运算符(也称“重载操作符”)的相关知识,同时通过示例代码介绍使用关键字 operator 重载运算符的具体方法。
全栈程序员站长
2022/09/05
3.7K0
从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
s1mba
2017/12/26
8770
从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
C.163: 重载只用于基本等价的操作
Having the same name for logically different functions is confusing and leads to errors when using generic programming.
面向对象思考
2020/03/25
2860
Operator1初识Operator
接触kubernetes也好多年了,开始就各种听说Operator的,但是从来没有深入了解动手写过Operator。开始体验一下简单的Operator。
对你无可奈何
2022/06/30
8550
operator new与new operator
operate new 是一个分配原始内存的函数——至少在概念上,它与 malloc() 没有太大区别。例如:
公众号guangcity
2021/12/20
1.4K0
operator Type() vs Type operator()
比如 int operator() vs operator int(),这两者有什么区别?
ClearSeve
2022/02/11
8670
python 通过字符串方式调用方法operator.methodcaller
class Point: def init(self, x, y): self.x = x self.y = y
用户5760343
2019/12/12
1.4K0
【C++】运算符重载案例 - 字符串类 ⑤ ( 重载 大于 > 运算符 | 重载 小于 < 运算符 | 重载 右移 >> 运算符 - 使用全局函数重载 | 代码示例 )
左移 << 操作符 cout << s << endl , 是将 s 对象输出到 cout 标准输出流中 ;
韩曙亮
2023/10/15
5520
使用 shell-operator 实现 Operator
在本文我们将介绍简化 Kubernetes Operator 创建的方法,并展示如何使用 shell-operator 轻松实现自己的 Operator。本文基于我们在 KubeCon Europe 2020上的最新演讲,这是此演讲的完整视频[1]
我是阳明
2020/09/22
1.3K0
使用 shell-operator 实现 Operator
【C++】运算符重载 ⑪ ( 数组类 中 等号 = 运算符重载 | 函数原型 Array& operator=(Array& a) | 完整代码示例 )
如果 想要 使用 一个已存在的数组类对象 为 另外一个已存在的数组类对象 赋值 ,
韩曙亮
2023/10/15
1700
【C++】运算符重载 ⑪ ( 数组类 中 等号 = 运算符重载 | 函数原型 Array& operator=(Array& a) | 完整代码示例 )
使用shell-operator实现Operator
在本文我们(Flant)将介绍简化 Kubernetes Operator 创建的方法,并展示如何使用 shell-operator 轻松实现自己的 Operator。本文基于我们在 KubeCon Europe 2020上的最新演讲,这是此演讲的完整视频[1]
CNCF
2020/09/22
4.1K0
使用shell-operator实现Operator
C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)
下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点) int x; int y; int len;   //node中有3个成员变量x,y,len bool operator <(const node &a)const {//重载<操作符。可以对两个node使用<操作符进行比较 return len<a.len; } }; 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改! 想必看到这里对重载运算符算是有一丁点的了解吧
Angel_Kitty
2018/04/08
2.6K0
C++ 运算符重载
本文引用于“C语言中文网”,我整理出来放在博客,方便大家共同学习。所有知识点和代码均已亲测可用,如有疑问,可提出,一起讨论学习。
用户7886150
2021/02/15
1.2K0

相似问题

重载operator<<以用于ostream

10

用于std::operator[]的operator[]重载

37

重载operator<<以接受模板函数

47

用于文本呈现的重载operator<<

20

用于stl容器的重载operator<<()

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文