c++中使用sort方法排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 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中重复的元素

猜你喜欢

转载自blog.csdn.net/weixin_41038905/article/details/82531436