STL的一些技巧函数使用

Posted ranjiewen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL的一些技巧函数使用相关的知识,希望对你有一定的参考价值。

1.emplace() 函数和 emplace_back() 函数

C++11的STL中新增加了emplace() 函数和 emplace_back() 函数,用来实现insert() 函数和 push_back() 函数的功能。

如果容器中的元素是对象:

emplace()  函数的功能是可以直接将参数传给对象的构造函数,在容器中构造出一个对象,从而实现 0 拷贝。(底层机制是调用placement new即布局new运算符来实现的)。

假设类MyClass 有构造函数 MyClass(T1 val1,T2 val2);

那么container.emplace(container.end() ,val1, val2) 可以直接在容器的末尾构造出一个对象,如果用container.insert(container.end() ,MyClass(val1,val2)) 会先构造一个对象,然后拷贝到容器的末尾。

同样的,emplace_back() 和 push_back() 的差别类似。

如果是一个已有的对象 MyClass obj;container.emplace(..., obj)  和  container.emplace_back(obj)的效率差不多。

2.stable_sort()方法 与 sort()方法;partition()方法和 stable_partition()方法

#include <iostream>
 #include <vector>
 #include <algorithm>
 
 using namespace std;
 
 bool IsOdd(int i)
 {
     return (i%2 == 1);
 }
 
 int main()
 {
     vector<int> v;
     for(int i = 0; i < 10; i++)
         v.push_back(i);
 
     cout<<"The original elements in the vector are: "<<endl;
     vector<int>::iterator it, bound;
 
     for(it = v.begin(); it != v.end(); it++)
         cout<<*it<<" ";
     cout<<endl;
 
     cout<<"First use the function partition() to separate all elements into 2 groups without ordering: "<<endl;
     //use partition to separate the vector into 2 parts...
     bound = partition(v.begin(), v.end(), IsOdd);
 
     cout << "All odd elements in the vector are:" <<endl;
     for(it = v.begin(); it != bound; it++)
         cout<<*it<<" ";
     cout<<endl;
 
     cout<< "All even elements in the vector are:" <<endl;
     for(it = bound; it != v.end(); it++)
         cout<<*it<<" ";
     cout<<endl;
 
     v.clear();
     for(int i = 0; i < 10; i++)
     v.push_back(i);
 
     cout<<"Secondly use the function stable_partition() to separate all elements into 2 groups with ordering: "<<endl;
     //use stable_partition to separate the vector into 2 parts...
     bound = stable_partition(v.begin(), v.end(), IsOdd);
     
         cout << "All odd elements in the vector are:" <<endl;
     for(it = v.begin(); it != bound; it++)
         cout<<*it<<" ";
     cout<<endl;
 
     cout<< "All even elements in the vector are:" <<endl;
     for(it = bound; it != v.end(); it++)
         cout<<*it<<" ";
     cout<<endl;
     
     return 0;
 }
    The original elements in the vector are:  
     0 1 2 3 4 5 6 7 8 9  
     First use the function partition() to separate all elements into 2 groups without ordering:  
     All odd elements in the vector are:  
     9 1 7 3 5  
     All even elements in the vector are:  
     4 6 2 8 0  
     Secondly use the function stable_partition() to separate all elements into 2 groups with ordering:  
     All odd elements in the vector are:  
     1 3 5 7 9  
     All even elements in the vector are:  
     0 2 4 6 8  

 

以上是关于STL的一些技巧函数使用的主要内容,如果未能解决你的问题,请参考以下文章

Android课程---Android Studio使用小技巧:提取方法代码片段

10 个你可能还不知道 VS Code 使用技巧(超实用!)

提效小技巧——记录那些不常用的代码片段

GCC优化技巧,真的有用吗?

VS2015使用技巧 打开代码片段C#部分

26个jQuery代码片段使用技巧