C++零星知识

2017-03-13  本文已影响37人  simulationer

const string&

在参数中使用const string&表示参数为字符串的常引用,传递的是地址,对形参操作就相当于对实参操作。引用形参可以向主调函数返回额外的结果,还可以提高程序的效率,节省大型对象复制的时空开销。

一般为了程序的健壮性,对于string类,如果不需要改变所存储的值,要定义成常引用。

std::stringstream基本用法

stringstream是字符串流。它将流与存储在内存中的string对象绑定起来。在多种数据类型之间实现自动格式化

<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本

stringstream对象的使用

#include<sstream>
#include<iostream>
using namespace std;
int main()
{
        string line,word;
        while(getline(cin,line))
        {
                stringstream stream(line);
                cout<<stream.str()<<endl;
                while(stream>>word){cout<<word<<endl;}
        }
        return 0;
}

输入:shanghai no1 school 1989

输出:

shanghi no1 school 1989
shanghai
no1
school
1989

stringstream提供的转换和格式化

相比c库的转换,它更加安全,自动和直接。

#include<sstream>
#include<iostream>
using namespace std;
int main()
{
        int val1 = 512,val2 =1024;
        stringstream ss;
        ss<<"val1: "<<val1<<endl     //“val1: "此处有空格,字符串流是通过空格判断一个字符串的结束
  <<"val2: "<<val2<<endl;
        cout<<ss.str();

        string dump;
        int a,b;
        ss>>dump>>a
     >>dump>>b;
        cout<<a<<" "<<b<<endl;
        return 0;
}

输出为:

val1: 512
val2: 1024
512 1024

第一处:将int类型读入ss,变为string类型
第二处:提取512,1024保存为int类型。当然,如果a,b声明为string类型,那么这两个字面值常量相应保存为string类型

通用的转换模板

用于任意类型之间的转换。函数模板convert()含有两个模板参数out_type和in_value,功能是将in_value值转换成out_type类型:

template<class out_type,class in_value>
out_type convert(const in_value & t)
{
stringstream stream;
stream<<t;//向流中传值
out_type result;//这里存储转换结果
stream>>result;//向result中写入值
return result;
}

这样使用convert():

double d;
string salary;
string s=”12.56”;
d=convert<double>(s);//d等于12.56
salary=convert<string>(9000.0);//salary等于”9000”

其他注意

stringstream不会主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消 耗,因些这时候,需要适时地清除一下缓冲 ( stream.str("") )

#include <cstdlib>
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
        stringstream ss;
        string s;
        ss<<"shanghai no1 school";
        ss>>s;
        cout<<"size of stream = "<<ss.str().length()<<endl;
        cout<<"s: "<<s<<endl;
        ss.str("");
        cout<<"size of stream = "<<ss.str().length()<<endl;
}

输出:

size of stream = 19
s: shanghai
size of stream = 0

参考

上一篇下一篇

猜你喜欢

热点阅读