C++11容器中新增加的emplace相关函数的使用
C++11中,针对顺序容器(如vector、deque、list),新标准引入了三个新成员:emplace_front、emplace和emplace_back,这些操作构造而不是拷贝元素。这些操作分别对应push_front、insert和push_back,允许我们将元素放置在容器头部、一个指定位置之前或容器尾部。
当调用push或insert成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时,则是将参数传递给元素类型的构造函数。emplace成员使用这些参数在容器管理的内存空间中直接构造元素。
emplace函数的参数根据元素类型而变化,参数必须与元素类型的构造函数相匹配。emplace函数在容器中直接构造元素。传递给emplace函数的参数必须与元素类型的构造函数相匹配。
其它容器中,std::forward_list中的emplace_after、emplace_front函数,std::map/std::multimap中的emplace、emplace_hint函数,std::set/std::multiset中的emplace、emplace_hint,std::stack中的emplace函数,等emplace相似函数操作也均是构造而不是拷贝元素。
emplace相关函数可以减少内存拷贝和移动。当插入rvalue,它节约了一次move构造,当插入lvalue,它节约了一次copy构造。
map的遍历
不断的发现以前的自己是个傻逼,这就是人生。
人这一生,其实都在不断找借口好让自己心安理得地活下去。
我出门代步用A8,旅游一般开jeep,但是我最喜欢的还是开玩笑
map按key排序
在下面的代码里实现。
map按value排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include <bits/stdc++.h> #include <hash_map> using namespace std; /* 由于hash_map定义在__gnu_cxx命名空间中,故你必须在使用时限定名字空间__gnu_cxx::hash_map, 或者使用using关键字加一个 using namespace __gnu_cxx; */ using namespace __gnu_cxx;
template<typename T> // auto不能修饰参数 void DISPLAY(T m) { for (auto i : m) { cout << i.second << endl; } for (auto it = m.begin(); it != m.end(); it++) { cout << it->first << it->second << endl; } return; }
// hash_*系列例如hash_map,hash_set 等已经被废弃了,C++11用unordered_map,unordered_set等来替代 void HASH_MAP() { hash_map<int, string> m; m[23] = "helu"; m[520] = "chengqiqi"; m[12] = "hejian"; DISPLAY(m); // 可以看出默认按照key排序输出 return; }
void SORT_KEY() { map<int, string, greater<int> > m; // 默认是less m[23] = "helu"; m[520] = "chengqiqi"; m[12] = "hejian"; DISPLAY(m); return; }
/* 基本思路就是:想直接用sort排序是做不到的,sort只支持数组、vetctor等的排序,所以我们可以先把map装 进pair里,然后再放入vector,自定义sort实现排序。 */
int main() { HASH_MAP(); SORT_KEY(); return 0; }
|
锤子定律非常简单,可以概括为一句话:当你的脑子里有一个锤子的时候,你会满世界找钉子。
C++保留两位小数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <iomanip> //不要忘了头文件 using namespace std;
int main() { cout<<setiosflags(ios::fixed)<<setprecision(2);
cout.setf(ios::fixed); cout<<setprecision(2);
cout<<fixed<<setprecision(2); return 0; }
|
最后更新时间:
本文链接:
https://hankin2015.github.io/2019/01/17/20190117emplace_back/版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!