目录
万能头文件:
大小写转换
islower/isupper函数
tolower/toupper函数
ASCII码
二分查找
binary_search函数
lower_bound和upper_bound函数
1.lower_bound函数:
2.upper_bound函数:
排序
sort函数
全排列
next_permutation()函数
prev_permutation()函数
最值查找
min和max
min_element和max_element
其他函数
memset
swap()
reverse()
unique()去重函数
#include
islower判断是否是小写字母,是则返回1,不是就返回0.
isupper判断是否是小写字母,是则返回1,不是就返回0.
#include
int main()
{
char ch = 'a';
if (islower(ch))
{
printf("%c is a lowercase letter\n", ch);
} else
{
printf("%c is not a lowercase letter\n", ch);
}
ch = 'B';
if (isupper(ch))
{
printf("%c is an uppercase letter\n", ch);
} else
{
printf("%c is not an uppercase letter\n", ch);
}
return 0;
}
输出结果为:
a is a lowercase letter
B is an uppercase letter
注意:islower
和isupper
函数只用于判断单个字符是否为小写字母或大写字母,不适用于判断字符串。
tolower
函数的原型为:
int tolower(int c);
它接受一个int
类型的参数,通常是一个字符的ASCII码,如果该字符是大写字母(A-Z),则返回对应的小写字母;否则保持不变。这个函数主要用于将大写字母转换为小写字母。
toupper
函数的原型为:
int toupper(int c);
它同样接受一个int
类型的参数,通常是一个字符的ASCII码,如果该字符是小写字母(a-z),则返回对应的大写字母;否则保持不变。这个函数主要用于将小写字母转换为大写字母。
#include
int main()
{
char ch = 'A';
printf("Lowercase of %c is %c\n", ch, tolower(ch));
ch = 'b';
printf("Uppercase of %c is %c\n", ch, toupper(ch));
return 0;
}
输出结果为:
Lowercase of A is a
Uppercase of b is B
注意:tolower
和toupper
函数只用于单个字符的大小写转换,不适用于字符串。
0是第48位,A是65,a是97
库函数只能对数组进行二分查找。
前提是数组是单增或者是单减的。
下面是binary_search
函数的一般用法:
bool binary_search(ForwardIt first, ForwardIt last, const T& value);
参数说明:
first
和last
:表示容器或容器的一部分的迭代器范围。搜索范围包括[first, last),即[first, last)是一个左闭右开的区间。value
:要搜索的特定值。函数返回布尔值,指示是否找到指定的值。如果找到了指定值,则返回true
;否则返回false
。
#include
#include
#include
int main()
{
std::vector nums = { 1, 2, 3, 4, 4, 6, 7, 8, 9 };
int target = 5;
bool found = std::binary_search(nums.begin(), nums.end(), target);
if (found) {
std::cout << "The value " << target << " is found." << std::endl;
}
else {
std::cout << "The value " << target << " is not found." << std::endl;
}
return 0;
}
1.lower_bound
函数:lower_bound
函数的原型如下:
template
lower_bound
函数接受三个参数:
first
和last
:表示容器或容器的一部分的迭代器范围。value
:表示要查找的值。lower_bound
函数返回一个迭代器,指向第一个不小于指定值的元素。如果找不到这样的元素,它将返回last
迭代器。
2.upper_bound
函数:upper_bound
函数的原型如下:
template
upper_bound
函数接受三个参数:
first
和last
:表示容器或容器的一部分的迭代器范围。value
:表示要查找的值。upper_bound
函数返回一个迭代器,指向第一个大于指定值的元素。
格式:sort(起始位置,结束位置的下一位,*比较函数可写或可不写(默认用小于比较))。
下面是一个示例代码,演示了如何使用sort
函数对一个向量中的元素进行排序:
#include
#include
#include
int main()
{
std::vector nums = {5, 3, 9, 1, 7};
std::sort(nums.begin(), nums.end());
for (int num : nums)
{
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在这个示例中,我们定义了一个向量nums
,并使用sort
函数对其进行排序。通过调用sort(nums.begin(), nums.end())
,我们对整个向量进行升序排序。然后,通过遍历向量输出排序后的元素。输出结果为1 3 5 7 9
,表示向量中的元素已按升序排序。
需要注意的是,sort
函数的实现使用的是快速排序(Quick Sort)算法或归并排序(Merge Sort)算法,具体实现可能因编译器和平台而异。此外,sort
函数还提供其他重载形式,可以自定义排序规则,例如自定义比较函数或自定义排序对象的operator<
。
下面是一个示例代码,演示了如何使用next_permutation()
函数生成给定序列的所有排列:
#include
#include
#include
int main()
{
std::vector nums = {1, 2, 3};
// 输出初始序列
std::cout << "初始序列:";
for (int num : nums)
{
std::cout << num << " ";
}
std::cout << std::endl;
// 生成所有排列
do {
// 输出当前排列
for (int num : nums)
{
std::cout << num << " ";
}
std::cout << std::endl;
} while (std::next_permutation(nums.begin(), nums.end()));
return 0;
}
输出结果如下:
初始序列:1 2 3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
按字典序进行排序,从小到大。
与next_permutation()相似,从大到小排序。
最值查找
min和max
min(a,b)返回a和b中较小的那个值,只能传入两个值,或者一个列表。
例如:
min(3,5)=3
min({1,2,3,4})=1
max同理,返回最大值。
min_element函数接受两个迭代器参数,表示容器的范围。它会返回指向容器中最小元素的迭代器。如果有多个最小元素,它将返回第一个最小元素的迭代器。
#include
#include
#include
int main()
{
std::vector nums = {5, 3, 2, 7, 9, 1};
auto it = std::min_element(nums.begin(), nums.end());
std::cout << "Min element: " << *it << std::endl;
return 0;
}
max_element同理。
memset(arr,0,sizeof(arr))将数组arr的所有元素设置为0.
注意:memset()函数对于非字符类型的数组可能会产生未定义的行为。
swap(&a,&b)
swap()函数可以用于交换任意类型的变量。
reverse()是一个用于反转容器中元素顺序的函数。
void reverse(开始,结尾)
unique()函数是C++标准库中的一个函数,用于去除容器中相邻的重复元素(尽量先排序),并返回一个指向新的"尾后"(beyond-the-end)元素的迭代器。此函数适用于大多数的容器类型,如vector、list和deque等。
以下是一个使用unique()函数去重vector容器的示例:
#include
#include
#include
int main() {
std::vector nums = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
// 使用unique函数去重
auto it = std::unique(nums.begin(), nums.end());
// 擦除重复元素后的容器大小
nums.erase(it, nums.end());
// 打印去重后的容器
for (int num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
输出:
1 2 3 4
在这个示例中,我们创建了一个vector容器nums
,其中包含了多个重复的元素。然后,我们使用std::unique(nums.begin(), nums.end())
函数将容器中的重复元素移动到末尾,并返回一个指向新的"尾后"元素的迭代器。接着,我们使用nums.erase(it, nums.end())
函数来擦除重复元素后的部分,并更新容器大小。最后,我们使用循环打印出去重后的容器。