Chinaunix首页 | 论坛 | 博客
  • 博客访问: 299983
  • 博文数量: 148
  • 博客积分: 4365
  • 博客等级: 上校
  • 技术积分: 1566
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 21:38
文章分类
文章存档

2014年(2)

2013年(45)

2012年(18)

2011年(1)

2009年(54)

2008年(28)

我的朋友

分类: C/C++

2013-01-28 11:01:55

Chapter 9 Sequential Containers

1.新增了array与forward_list顺序容器,前者相当于C中数组,后者为单链表。

array的特点是定长,不能add/remove新元素;forward_list没有size接口,因为这将导致遍历元素,开销不确定,同时其它顺序容器的size接口应该是被重写了,SBL说它们现在比以前效率高了,例如list的size复杂性从以前的线性到现在的常数级(其它的好像都是常数级,额)。SBL又建议了一遍,不要使用C中数组那些原始的数据结构啦~

2.cbegin和cend函数返回的const迭代器,前面总结过了,不需要改写的时候用这个。

3.容器的list initialization,大括号的那种形式,这个回头得好好总结回顾下,多次提到了这个形式。

4.看到了点array的东西,写一下:

其模板带2个参数,除了类型还有容量:array,容量必须给出,这是其类型的一部分。

所以在定义其迭代器时也不要忘了给出容量。

由于其容量固定,创建该容器时,如果没有给出初始化数据,那么元素将被初始化为默认值。

array类型的变量可以互相赋值,array a; arrayb=a;//这个c数组确实办不到。

5.交换元素的std::swap,过去也有啊,没错,但过去都是成员函数像std::vector::swap,这次新增了更为抽象的模板。

老的成员函数版本怎么实现的有点忘了,新的std::swap只是交换容器内部的堆区的指针(array除外),所以复杂度是常数级,SBL更推荐使用这个。由于是交换内部指针,故老的迭代器没有失效,只是指向了已经归属另一个容器的该元素。

6. insert函数现在返回指向被插入的那个元素,如果是插入多个元素,则指向第一个。循环迭代什么的可以省点代码。

7. emplace操作。如下假设容器c持有的元素Sales_data有一个3个参数的构造函数

c.emplace_back("978-0590353403", 25, 15.99);
// error: there is no version of push_back that takes three arguments
c.push_back("978-0590353403", 25, 15.99);
// ok: we create a temporary Sales_data object to pass to push_back
c.push_back(Sales_data("978-0590353403", 25, 15.99));
emplace_back将直接在容器c中尾部位置根据入参创建一个Sales_data对象,第三行的显示调用则是先创建一个临时对象,再复制到c的尾部。

还有emplace_front对应push_front;emplace对应insert。

8. shrink_to_fit,vector,deque,string特有,看名字就知让容器缩水,当前容器的sizes是15,capacity是20,调用这个成员函数后,容器可能会释放掉5个元素的存储空间。注意是可能,换句话讲是提出的一个请求,各编译器根据实际情况进行处理。

9. string与数值的转换。

新增的std::to_string可以将数值转换为string。很像c中那个sprintf

int main() 
{
    double f = 23.43;
    std::string f_str = std::to_string(f);
    std::cout << f_str << '\\n';
}
结果是23.430000.

string转数值有std::stoi;std::stod等等了,按需使用。注意可能的异常:

    std::invalid_argument if no conversion could be performed
    std::out_of_range if the converted value would fall out of the range of the result type.

阅读(785) | 评论(0) | 转发(0) |
0

上一篇:类基本定义相关

下一篇:泛型lambda表达式

给主人留下些什么吧!~~