🧸🧸🧸🧸🧸
  • 🧸's Blog
  • CodeJam
    • Kickstart Round H 2018 A Big Buttons
    • Kickstart Round H 2018 B Mural
  • C++/C
    • CashBox Code
    • for迭代数组
    • 字符串操作
    • 在函数中,int与int&的区别
    • sizeof()
    • memset的用法
    • 传值&传引用&传指针
    • STL
  • 经典算法
    • n皇后问题
  • Java
    • servlet从网址传入参数中文乱码
  • SQL
    • 左外连接与右外连接的区别
  • API
    • DeepGTAV v2
    • VPilot
    • SantosNet
    • deepdrive
    • iceb.link API
  • Spring Boot
    • Entity实体
    • 是否加@service的区别
    • Entity内字段表中名字不能为system
由 GitBook 提供支持
在本页
  • sort()
  • binary_search()
  • lower_bound()
  • upper_bound()
  • vector

这有帮助吗?

  1. C++/C

STL

sort()

1.对数组内元素进行排序

int a[] = {1,5,3,2};
sort(&a[0],&a[sizeof(a)/sizeof(int)]);
for(int i=0;i<4;i++){
    cout<<a[i]<<' ';
}
输出:1 2 3 5

2.以一定规则排序(使用C++自带的)

double a[] = {1,5,3,2};
sort(&a[0],&a[sizeof(a)/sizeof(double)],greater<double>());  //从大到小排序
//less<double>()为从小到大排序。默认从小到大。

for(int i=0;i<4;i++){
    cout<<a[i]<<endl;
}
输出:5 3 2 1

3.用函数自定义排序规则

bool cmp(int a,int b){  //定义用个数位的大小升序排序
    a = a%10;
    b = b%10;
    return a<b;
}
//return a>b;  //个位数大小降序输出

int main(){
    int a[] = {11,55,37,26};
    sort(&a[0],&a[sizeof(a)/sizeof(int)],cmp);
    for(int i=0;i<4;i++){
        cout<<a[i]<<endl;
    }
}
输出:11 55 26 37
//输出:37 26 55 11
class stu{
public:
    string name;
    int id;
    double gpa;
};

bool cmp(stu s1,stu s2){  //对class(或struct)中的id从小到大排序
    return s1.id<s2.id;
}

int main(){
    stu students[] = {{"jack",3,88.8},{"macllo",12,99.23},{"kally",1,80}};
    sort(&students[0],&students[sizeof(students)/sizeof(stu)],cmp);
    for(int i=0;i<sizeof(students)/sizeof(stu);i++){
        cout<<students[i].name<<endl;
    }
}
输出:kally jack macllo

binary_search()

1.对“有序”序列进行二分查找(因为只有有序才能二分查找)

用法:二分法若查到此数据,则返回1,没有查到返回0.

bool cmp(int a,int b){
    return a>b;
}
int main(){
    int a[] = { 12,45,8,98,21,7};
    sort(a,a+6,cmp);
    cout <<"result:"<< binary_search(a,a+6,8) << endl;
    cout <<"result:"<< binary_search(a,a+6,8,cmp) << endl;
    /*
    注意:之所以输出一个为0另一个为1,是由于sort过的数组按从大到小的顺序排列,
    而binary_search()默认为对从小到大序列查找,故第一个二分查找失败。
    所以,如果用自定义规则排序,则在binary_search()里也要加上规则函数。
    */
    return 0;
}
输出:
result:0
result:1

2.同理也可查找class或struct

lower_bound()

二分查找下界,查找区间里下标最小的,大于等于"值" 的元素

查找的值存在,得到等于值的指针

bool cmp(int a,int b){
    return a>b;
}

int main(){
    int a[] = { 12,45,20,8,21,7};
    sort(a,a+6,cmp);
    //排序后:45、21、20、12、8、7
    int* result_low = lower_bound(a,a+6,8,cmp);  //所查找的值存在时
    cout << *result_low << endl;
    return 0;
}
输出:8

查找的值不存在,得到大于“值”的指针

bool cmp(int a,int b){
    return a>b;
}

int main(){
    int a[] = { 12,45,20,8,21,7};
    //排序后:45、21、20、12、8、7
    sort(a,a+6,cmp);
    int* result_low = lower_bound(a,a+6,14,cmp);  //所查找的值不存在
    cout << *result_low << endl;
    return 0;
}
输出:12

upper_bound()

二分法查找上界,查找区间里下标最小的,大于"值"的元素。

不论所查找的值是否存在,都得到大于“值”的元素的指针

bool cmp(int a,int b){
    return a>b;
}

int main(){
    int a[] = { 12,45,20,8,21,7};
    //排序后:45、21、20、12、8、7
    sort(a,a+6,cmp);
    int* result_up = upper_bound(a,a+6,12,cmp);  //所查找值存在
    cout << *result_up << endl;
    return 0;
}
输出:8

bool cmp(int a,int b){
    return a>b;
}

int main(){
    int a[] = { 12,45,20,8,21,7};
    //排序后:45、21、20、12、8、7
    sort(a,a+6,cmp);
    int* result_up = upper_bound(a,a+6,14,cmp);  //所查找值不存在
    cout << *result_up << endl;
    return 0;
}
输出:12

vector

需要 #include <vector>

功能:动态数组

class stu{
public:
    string name;
    int id;
    double gpa;
};

int main(){
    vector<stu> a;
    stu b = {"bob",2,87.2};
    a.push_back(b);   //
    cout << a.at(0).name<<endl;

    b = {"killy",12,100.1};
    a.push_back(b);
    cout << a[1].gpa <<endl;
    /*
    a.at(1)
    a[1]
    均可
    */

    return 0;
}
输出:bob 100.1
上一页传值&传引用&传指针下一页n皇后问题

最后更新于6年前

这有帮助吗?