c++ String实现 基于Vector
来源:互联网 发布:淘宝聊天记录 编辑:程序博客网 时间:2024/06/09 22:01
学习这个,了解到的东西就是
一个函数的返回值如果是对象引用,那么这个返回值绝不能是一个局部变量;如果函数返回值是一个对象,那么返回值就是对象的副本了。
#ifndef _str_H#define _str_h#include"vec.h"#include<cstring>#include<cctype>#include<algorithm>#include<iterator>class Str{Vec<char> data;friend std::istream& operator>>(std::istream&,Str&);public:typedef Vec<char>::size_type size_type;Str() {}Str(size_type n,char c):data(n,c) { }Str(const char* s) {std::copy(s,s+std::strlen(s),std::back_inserter(data));}template <class In> Str(In a,In b){ std::copy(a,b,std::back_inserter(data)); }size_type size()const {return data.size();}char& operator[](size_type i) {return data[i];}const char& operator[](size_type i)const {return data[i];}Str& operator+=(const Str& s){std::copy(s.data.begin(),s.data.end(),std::back_inserter(data));return *this;}};std::istream& operator>>(std::istream& is,Str& str){str.data.clear();char c;while(is.get(c) && std::isspace(c)) ;if(is){do str.data.push_back(c);while(is.get(c)&& !std::isspace(c));}if(is) is.unget();return is;}std::ostream& operator<<(std::ostream& os,Str& str){Str::size_type i;for(i=0;i!=str.size();i++) os<<str[i]; return os;}Str operator+(const Str& s1,const Str& s2){ //千万不要返回局部对象的引用, Str s=s1; //函数返回值必须是Str,不能说Str& s+=s2; //因为s是局部变量,函数结束就要释放内存 return s; //返回值是Str,则返回s的一份副本!!!高 }#endif
测试例程
#include"vec.h"#include"str.h"#include<iostream>using namespace std;int main(){Str s1(2,'c');cout<<s1;cout<<endl;Str s2=s1;cout<<s2;cout<<endl;Str s3=s1+"ss";cout<<s3;cout<<endl;s3+=s2;cout<<s3;}
好了,就 酱
0 0
- c++ String实现 基于Vector
- 基于vector的栈实现(C++)
- C++Primer--string、vector、iterator
- C语言实现 vector
- c实现vector
- c++vector简单实现
- [C++]Vector源码实现
- 【C++】实现容器Vector
- c++:模拟实现vector
- vector的实现【C++】
- 【温故知新C/C++】02:string::size_type ||vector
- C++Simplify04-标准库string和vector
- Array vector string and C str
- c++primer 第三章数组 string vector
- 重载技巧+简单实现string和Vector
- string,list,vector组合实现大数加法
- 数据结构-Vector实现(C++)
- 【STL C++】简单实现vector
- Linux安装配置SVN服务器
- 栈与堆理解与区别
- iOS 10 简单配置
- Http Range请求头格式
- A
- c++ String实现 基于Vector
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Keras + Windows +Anaconda2-4.2.0 深度学习框架快速搭建
- 用邻接链表存储无向图和有向图
- win10创意者更新是什么 Win10创意者更新升级方法
- Linux Ubuntu从零开始部署web环境及项目 -----tomcat+jdk+mysql (二)
- redirect和forward的区别
- 定时5秒自动换图和背景加onclick点击左右切换图片和背景
- 买糖果(京东2016实习生真题)