Sort函数:
sort函数是一个高效的排序函数,其排序效率不逊色于快速排序算法,它很好地体现了C++的强大,我在这对sort函数进行笔记总结,供大家参考。
使用——
一般情况:
sort(首地址,尾地址,排序方法(可有可无))
sort函数有三个参数,第一个参数是需要排序部分的首地址,第二个参数是尾地址,具体是指所需排序数据的最后一位的地址还要+1,第三个参数是排序方法,比如是从小到大排序还是从大到小排序。举个例子,有数组:
int arr[10] = {1, 2, 231, 213, 23, 55, 3, 456, 32, 100}
如果想要对全部数据进行从小到大排序,首地址就是 arr, 尾地址就是 arr+10(位于100之后), 第三个参数可以没有,此时实现的就是从小到大排序。
如果想要对【3】到【8】数据进行从小到大排序呢?那么首地址就是 arr+3, 尾地址就是 arr+9而不是 arr+8,因为尾地址还要往后移一个存储单元。
一般第三个参数有三种情况:
1.没有第三个参数:此时进行从小到大排序,排序数据默认为 int。
int arr[5] = {1, 2, 234, 54, 58};
sort(arr,arr+5);
2.参数为:less<数据类型>():此时进行从小到大排序, 排序数据类型可以由自己选择
double arr[5] = {1.2, 2.2, 234.32, 54.2, 58.234};
sort(arr,arr+5,less<double>());
3.参数为:greater<数据类型>():此时进行从大到小排序,排序数据类型也是自己选择
double arr[5] = {1.2, 2.2, 234.32, 54.2, 58.234};
sort(arr,arr+5,greater<double>());
排序字符:
这时候数据类型就是 char, 可以对一个字符串进行排序。 它的规则是按照字符的阿斯克码大小排序,less就是从阿斯克码小的排到大的, greater就是从阿斯克码大的排到小的。
头文件:
可以是 #include<algorithm>,也可以是万能头文件 #include<bits/stdc++.h>
引用:
引用是变量的别名,它能简化指针,同时能够发挥指针的作用。
通过&符号,可以创建一个引用。引用本质是一个指针常量,即int *const ref = int &ref。它使得这个指针只能指向一个地方,也就是只能指向一个变量,而不能改变。
代码 + 注释 + 例子或许可以帮你更好地理解。
#include<bits/stdc++.h>
using namespace std;
void func(int &ref);
void print(const int &reff);
int main(void)
{
int a = 10;
int &ref = a;
//* 引用必须初始化,初始化之后不能再改变
ref = 20;
//* 引用就是一个变量的别名,通过引用,可以直接改变变量的内容
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
func(a);
print(a);
//! 引用作为函数参数时,传入函数的是变量的引用,而不是值。
//* 引用的本质是指针常量,即int *const ref = int &ref = a,引用的指向不可变
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
system("pause");
return 0;
}
void func(int &ref)
{
ref = 100; //TODO 函数得到函数外变量的引用,则可以像变量一样改变内容
}
void print(const int &reff)
//TODO 当给函数引用参数前加一个const,那么在函数内就不能再修改引用的值了
{
cout << reff << endl;
}
引用有个注意事项。在此之前,我们先来谈谈计算机运行时内存分配的四个区。全局区,堆区,栈区,代码区。
全局区:存放全局变量,静态变量,const修饰的变量,还有常量。
堆区:由程序员控制,可以由程序员管理其内存,常见的是C语言用malloc动态分配内存。
栈区:由程序控制,在程序运行前分配内存,结束后释放。
代码区:存放代码。
因此,对于引用,必须使引用指向合法的内存空间,合法的内存空间是堆栈区,也就是说引用只能指向堆栈区的变量,而不能指向常量和const修饰的变量,静态变量,全局变量。
举个例子:
const int b = 10;
int &a = b; //这是不合法的,因为b存放在全局区,而引用只能指向堆栈
喜欢的话点赞关注哦~祝你学习快乐