Accelerated C++ 3-5章小总结


Chapter 3

头文件:<ios>

​        类型:std::streamsize

头文件:<iomanip>

        控制器:std::setprecision 设置输出的有效位数

例:

1
2
//获得原精度
streamsize prec = cout.precision();


 

1
2
3
4
//设置输出3位有效位,如:86.3
cout <<  "Your final grade is "  << setprecision(3)
     << 0.2 * midterm + 0.4 * final + 0.4 * sum / count

    << setprecision(prec) << endl;


也可以只使用precision()方法:

1
2
3
4
5
6
//把精度设置为3,返回原先精度
streamsize prec = cout.precision(3);
cout <<  "Your final grade is "
     << 0.2 * midterm + 0.4 * final + 0.4 * sum / count << endl;
//设置回原先值
cout.precision(prec);


Precision : 精密,精确

Chapter 4 



左值


        L-value, 表示可以放在=左边的值,也可以理解为是具有可寻址内存空间的值(L:location)。也存在只读左值,比如const类型的变量,这       是不能放在等号左边的。非常量引用和++也要求操作数为左值。


 


        R-value 是不可写的,一般是临时对象,也可以理解为read value


 

1
2
3
//常量引用可以引用右值
const  int & ci = 200;
cout << ci;



clear()


    作为istream的成员,它清楚所有的错误标记以使输入动作可以继续;


    作为vector的成员,它删除其中的全部成员使之成为一个空的向量。


    size_type


    存放string的长度?请使用:string::size_type

1
string::size_type len = name.size();



setw()


    控制紧接着的输出的格式,对下一个输出填充一些空格。


    //<iomanip>


1
2
std::cout << 0 << std::setw(5) << 1 << 0 << std::endl;
//0     10


想要左对齐?

1
cout.flags(std::ios::left);

    

更多流控制器:http://www.cplusplus.com/reference/iomanip/           

更多flags:http://www.cplusplus.com/reference/ios/



函数的独立


    为了组织程序,可以将每一个/几个函数定义独立放到一个单独的文件中(main.cpp能怎么用,函数.cpp就能怎么用),并有一个对应的头文件放        函数声明。(以及类的声明)


    头文件中的using声明会using到每一个包含它的程序中,因此在头文件中最好不要使用using声明。




#ifndef最好位于文件的第一行,就算是注释也不能放它前面。



Chapter 5


vector.erase()


        要注意使用后vector.size()会变化,因此如果是在循环中使用每次应重新计算vector.size()


        同理vector.end()也应重新获取。


 


使用迭代器进行随机访问


1
2
if  ( students[i].grade < 60 )
    students.erase( students.begin() + i );


(不支持随机访问的容器类型不允许这种操作,不过仍允许使用迭代器顺序访问


//如果将students类型由vector改为list,则编译不能通过


 


 i int 型?NO!


1
vector<Student_info>::size_type i = 0



完全使用迭代器的版本:


1
2
3
4
5
6
if  ( (*iter).grade < 60 )
    iter = students.erase( iter );
//vector.erase()将使指向被删元素和该元素后面元素的迭代器失效(而list.erase()仅会使指向被删元素的迭代器失效,其后元素的位置并未变化,因此迭代器不失效)
//同时返回指向被删元素后面那个元素的迭代器。
//如果将students类型由vector改为list,该代码不需任何变化

 

vector.push_back()    使所有指向这个vector的迭代器失效

vs

list.push_back()    不会使指向其他元素的迭代器失效



自备sort()


        list 不支持完全随机的访问,不能使用标准库中的sort()函数:


1
students.sort( compare );



<cctype>


        对字符进行分类和变换的函数集合。


            std::isspace( c );


        更多函数:http://www.cplusplus.com/reference/cctype/



str.substr( i, n );


        注意这里 n 长度


            //复制str半开区间 [ i, j )所表示的字符到s


            s = str.substr( i, j - i );


        (从 i 开始复制 j - i 个字符)


 


vector<string>的纵向连接


1
2
3
ret.insert ( ret.end(), bottom.begin(), bottom.end() );
//对于vector容器,insert()与push_back()一样,都可能引起内存的重新分配,因此使所有迭代器失效。

 而当使用了失效了的迭代器时亲测是出现了下图所示情况:

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值