C++11新特性(22)- forward_list

设计目的


到目前为止,我们介绍的新特性几乎都是为了改善可读性,提高便利性的。forward_list也不例外。当然,为了尽可能地提高效率,forward_list只提供单方向的遍历方式,同时不提供取得链表大小的操作。


使用方法


使用方法,例子等大家可以参照下面的网址:


http://www.cplusplus.com/reference/forward_list/forward_list/


除了单方向和无法取得大小以外,一切都和一般链表没有什么区别。


续写神奇


为了了解forward_list容器的性能,我们编写下面的代码来测试插入操作的效率:


struct Node{
   Node(int v):value(v),next(nullptr){}
   Node* next;
   int value;
};
DWORD
begin = GetTickCount();
//std::forward_list<int> list;
/*
 std::list<int> list;
 for(int i = 0; i < 10000000; ++i)
     
list.push_front(i);
*/
Node* head = nullptr;
for(int i = 0; i < 10000000; ++i){
   
Node* new_node = new Node(i);
   new_node->next = head;、
   head = new_node;
}
DWORD end = GetTickCount();
std::cout << end - begin << std::endl;


代码分别使用forward_list,list,手写链表进行了确认,结果如下:


cha入速度的比较结果:手写链表的速度最快,list容器次之,forward_list容器最慢。


仅从forward_list和手写链表的比较结果来讲,使用尽量小的内存,牺牲了一些性能,换来了便利。


继vector的效率超过array以后,list的效率再次超过了forward_list。已经不感到意外了。


作者观点


只有在你真正对对内存敏感时考虑使用forward_list吧。


觉得本文有帮助?请分享给更多人。
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

猜你喜欢

转载自blog.csdn.net/craftsman1970/article/details/80328796