容器的emplace成员函数
来源:互联网 发布:卸载软件找不到程序 编辑:程序博客网 时间:2024/05/21 06:32
在C++新标准中引入了三个新成员---emplace_front、emplace、和emplace_back,这些操作是构造而不是拷贝元素。这些操作分别对应分别是push_front、insert、push_back,允许我们将元素放在容器头部、一个指定位置之前或容器尾部。我们以下拿push_back和emplace_push来举例。其他的成员函数原理是一样的。当我们调用push_back函数时,我们将元素类型的对象当做参数传递给元素类型的赋值构造函数。而当我们调用一个emplace_back成员函数时,则是将参数传递给元素类型的相应的构造函数。emplace使用这些参数在容器管理的内存空间中直接构造函数。例如:我们自己定义一个Foo类。在类中我们自己定义了两个构造函数、一个赋值构造函数、一个重载赋值运算操作符和一个析构函数。class Foo{private:int val;string str;public:Foo() :val(0), str(""){cout << "默认构造函数" << endl;}Foo(int v, string s) :val(v), str(s){cout << "两个参数的构造函数" << endl;}Foo(const Foo &rhs){val = rhs.val;str = rhs.str;cout << "赋值构造函数" << endl;}Foo &operator=(const Foo &rhs){val = rhs.val;str = rhs.str;cout << "赋值操作符重载" << endl;return *this;}~Foo(){cout << "析构函数" << endl;}};假如我们定义一个vector<Foo> ve容器。我们分别使用push_back和emplace_back成员函数向容器中添加元素。如下:vector<Foo> ve;ve.push_back(Foo(19, "Jay"));ve.emplace_back(18,"Tom");其中对emplace_back和push_back调用都会创建新的Foo对象,在调用emplace_back时,会在容器中直接创建对象,调用的是两个参数的构造函数。而调用push_back则会创建一个临时对象,然后用该临时对象作为参数传递给Foo类型的赋值构造函数。最后析构该临时对象。输出结果如下:
注意:emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数匹配。
0 0
- 容器的emplace成员函数
- C++11 emplace成员函数
- 【C/C++开发】容器set和multiset,C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())
- C++11容器中新增加的emplace相关函数的使用
- 实战c++中的vector系列--C++11对vector成员函数的扩展(cbegin()、cend()、crbegin()、crend()、emplace()、data())
- C++容器vector的常用成员函数
- map的emplace方法
- 容器中swap成员函数
- 容器中swap成员函数
- STL remove 和容器的成员函数erase
- vector容器成员函数resize与reserve的区别
- 容器关于访问成员的函数及注意事项
- STL线性容器List成员函数sort的原理
- STL: vector容器成员函数resize的作用
- STL deque的emplace方法(12)
- C++11中emplace的使用
- 闲谈STL容器之size()成员函数
- 调用容器内对象成员函数
- First Day at this Blog
- 全排列
- Ubuntu 14.04下为Virtualbox 4.3.20开启usb设备支持
- Playframework中文小站
- Java Collection
- 容器的emplace成员函数
- 技术团队负责人应该具备怎样的能力
- ArrayAdapter和SimpleAdapter详解
- iOS网络数据安全
- swift之应用程序管理
- 随笔
- c++实验1-求两个数的和差
- 堆栈与程序指针
- Objective-C学习笔记(四):OC之分类、类对象、description方法和SEL