版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41038905/article/details/82531436
编程经常要用到排序,而sort方法是algorithm头文件里的一个标准函数,能进行高效的排序,默认是按元素从小到大排序,省事也省心。
首先sort方法可以对静态的数组进行排序
#include<iostream>
using namespace std;
int main(){
int a[10] = { 9, 0, 1, 2, 3, 7, 4, 5, 100, 10 };
sort(a, a +10);
for (int i = 0; i < 10; i++)
cout << a[i] << endl;
return 0;
}
这里可以看到是sort(a,a+10),但是数组a一共只有9个元素,为什么是a+10而不是a+9呢?
因为sort方法实际上最后一位地址对应的数是不取的。
对vector使用sort函数:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
vector<int> a;
a.push_back(score);
sort(a.begin(), a.end());
for (vector<int>::iterator it = a.begin(); it != a.end(); it++){
cout << *it << endl;
}
return 0;
}
vector,set,map这些容器的end()取出来的值实际上并不是最后一个值,而end的前一个才是最后一个值。取出容器的最后一个值方法需要用到prev:
cout << << *prev(a.end()) << endl;
对string进行排序:
string data;
while(cin>>data)
{
sort(data.begin(),data.end());
cout<<data<<endl;
}
顺便在此总结下一 各类容器的操作方法:
当对象很大时,建立指针的容器而不是对象的容器
1 .STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制。
这也好理解,STL工作的容器是在堆内开辟的一块新空间,而我们自己的变量一般存放在函数栈或另一块堆空间中。为了能够完全控制STL自己的元素,为了能在自己的地盘随心干活,这就涉及到复制。而如果复制的对象很大,由复制带来的性能代价也不小,对于大对象的操作,使用指针来代替对象能消除这方面的代价。
1.vector的使用和初始化
#include<vector>
using namespace std;
vector<T> v1(v2);
vector<T> v1(n,i); // v3包含n个值为i的元素
vector<T> v1(n); // v4包含初始化的元素的n个副本,默认元素值为0
v1.push_back();
vector<type>::iterator it=V1.begin();//取值使用*it
v.empty(); 如果v为空,则返回true,否则返回false
v.size(); 返回v中元素的个数
v.push_back(t); 在v的末尾添加一个值为t的元素
v[n]; 返回v中位置为n的元素,从0开始计数
v1=v2; 把v的内容替换为v2的一个副本
v1==v2; 比较v1和v2的内容,相等则返回true,否则返回false
1.List的使用和初始化
list<int> lst; //创建空list
list<int> lst(5); //创建含有5个元素的list
list<int> lst(3,2); //创建含有3个元素的list
list<int> lst(lst2); //使用lst2初始化lst4
list<int> lst(lst2.begin(),lst2.end()); //同lst4
List常用操作函数:
Lst1.assign() 给list赋值
Lst1.back() 返回最后一个元素
Lst1.begin() 返回指向第一个元素的迭代器
Lst1.clear() 删除所有元素
Lst1.empty() 如果list是空的则返回true
Lst1.end() 返回末尾的迭代器
Lst1.erase() 删除一个元素
Lst1.front() 返回第一个元素
Lst1.get_allocator() 返回list的配置器
Lst1.insert() 插入一个元素到list中
Lst1.max_size() 返回list能容纳的最大元素数量
Lst1.merge() 合并两个list
Lst1.pop_back() 删除最后一个元素
Lst1.pop_front() 删除第一个元素
Lst1.push_back() 在list的末尾添加一个元素
Lst1.push_front() 在list的头部添加一个元素
Lst1.rbegin() 返回指向第一个元素的逆向迭代器
Lst1.remove() 从list删除元素
Lst1.remove_if() 按指定条件删除元素
Lst1.rend() 指向list末尾的逆向迭代器
Lst1.resize() 改变list的大小
Lst1.reverse() 把list的元素倒转
Lst1.size() 返回list中的元素个数
Lst1.sort() 给list排序
Lst1.splice() 合并两个list
Lst1.swap() 交换两个list
Lst1.unique() 删除list中重复的元素