c++ 11中emplace_back替代push_back的相关知识点,含右值引用,move用法等
2018-03-02 10:38
393 查看
C++11引入了右值引用,转移构造函数,push_back()右值时就会调用构造函数和转移构造函数(原来是调用拷贝构造,会为临时变量申请堆空间,影响程序效率,C++11以后为右值引用调用转移构造函数,不会为临时变量申请堆空间,而是直接赋值,提高程序效率)。
使用mplace_back替代push_back()可以在这上面有进一步优化空间,只调用构造函数不需要调用右值引用转移构造函数。如:reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936)); //有类的创建elections.emplace_back("Nelson Mandela", "South Africa", 1994); //没有类的创建
一、主要知识点C++ 11 左值,右值,左值引用,右值引用,std::move, std::fowardhttp://blog.csdn.net/xiaolewennofollow/article/details/52559306
emplace_back() 和 push_back 的区别http://blog.csdn.net/xiaolewennofollow/article/details/52559364
二、其他相关知识点:
C++11中std::move的使用https://www.cnblogs.com/zhangdongsheng/p/7664228.html vector<string> v;
string a = "123"; //或std::string &&a = "123";显示的标识a是全局字符串"123"的右值引用
cout<< "at first, std::string a is: " << a<<endl; //打印123
/*右值"123", 它的所有者将从原先的左值(变量std::string a), 转移到新的左值(std::vector v)
*所以, 使用std::move时一定保证, 以前的左值不再真需要了. 典型使用场合就是: (构造)函数的参数, 避免了再复制*/
v.push_back(std::move(a));
cout << "after std::move(a), now std::string a is: " << a; //打印空最后的glog将无法打印出a最开始的拷贝构造获取的值"123",因为全局字符串"123"的所有者,已经从最开始的变量a,转移到了v
C++ 11中的左值引用和右值引用https://www.cnblogs.com/sxmcACM/p/4498241.html
使用mplace_back替代push_back()可以在这上面有进一步优化空间,只调用构造函数不需要调用右值引用转移构造函数。如:reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936)); //有类的创建elections.emplace_back("Nelson Mandela", "South Africa", 1994); //没有类的创建
一、主要知识点C++ 11 左值,右值,左值引用,右值引用,std::move, std::fowardhttp://blog.csdn.net/xiaolewennofollow/article/details/52559306
emplace_back() 和 push_back 的区别http://blog.csdn.net/xiaolewennofollow/article/details/52559364
二、其他相关知识点:
C++11中std::move的使用https://www.cnblogs.com/zhangdongsheng/p/7664228.html vector<string> v;
string a = "123"; //或std::string &&a = "123";显示的标识a是全局字符串"123"的右值引用
cout<< "at first, std::string a is: " << a<<endl; //打印123
/*右值"123", 它的所有者将从原先的左值(变量std::string a), 转移到新的左值(std::vector v)
*所以, 使用std::move时一定保证, 以前的左值不再真需要了. 典型使用场合就是: (构造)函数的参数, 避免了再复制*/
v.push_back(std::move(a));
cout << "after std::move(a), now std::string a is: " << a; //打印空最后的glog将无法打印出a最开始的拷贝构造获取的值"123",因为全局字符串"123"的所有者,已经从最开始的变量a,转移到了v
C++ 11中的左值引用和右值引用https://www.cnblogs.com/sxmcACM/p/4498241.html
相关文章推荐
- C++ 11 move应用于右值引用
- C++ 11中的右值引用以及std::move
- c++ 11 移动语义、std::move 左值、右值、将亡值、纯右值、右值引用
- C++ 11 的 move 构造函数和右值引用
- C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
- c++ 11 移动语义、std::move 左值、右值、将亡值、纯右值、右值引用
- 【原】C++ 11右值引用 std::move的作用
- C++ 11 右值引用以及std::move
- C++ 11 右值引用以及std::move
- C++ 11右值引用
- C++ 11 中的右值引用
- C++ 11中的左值引用和右值引用
- C++ 11右值引用
- 实战c++中的vector系列--知道emplace_back为何优于push_back吗?
- C++ 11的右值引用
- C++ - "emplace_back" 和 "push_back" 的区别
- C++ 学习(右值引用, std::move)
- C++ 11中的右值引用
- C++ 11右值引用
- C++ - "emplace_back" 和 "push_back" 的区别