C++零星知识

const string&

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

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

std::stringstream基本用法

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

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

stringstream对象的使用

#include
#include
using namespace std;
int main()
{
        string line,word;
        while(getline(cin,line))
        {
                stringstream stream(line);
                cout<>word){cout<

输入:shanghai no1 school 1989

输出:

shanghi no1 school 1989
shanghai
no1
school
1989

stringstream提供的转换和格式化

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

#include
#include
using namespace std;
int main()
{
        int val1 = 512,val2 =1024;
        stringstream ss;
        ss<<"val1: "<>dump>>a
     >>dump>>b;
        cout<

输出为:

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
out_type convert(const in_value & t)
{
stringstream stream;
stream<>result;//向result中写入值
return result;
}

这样使用convert():

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

其他注意

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

#include 
#include
#include
using namespace std;
int main()
{
        stringstream ss;
        string s;
        ss<<"shanghai no1 school";
        ss>>s;
        cout<<"size of stream = "<

你可能感兴趣的:(C++零星知识)