目录
1.全排列
1.1.next_permutation()函数
1.2.prev_permutation()函数
2.其他库函数
2.1.memset()
2.2.swap()
2.3.reverse()
2.4.unique()
next_permutation函数用于生成当前序列的下一个排列.它按照字典对序列进行重新排列,如果存在下一个排序,则将当前序列更改为下一个排列,并返回true;如果当前序列已经是最后一个排序,则将序列更改为第一个排序,并放回false.
vector nums= {1,2,3};
cout << "Initial permutation: ";
for(int num : nums){
cout << num << ' ';
}
cout << endl;
//生成下一个排列
while (next_permutation(nums.begin() , nums.end())){
cout << "Next permutation: ";
for(int num:nums){
cout << num << ' ';
}
cout << endl;
}
prev_permutation函数与next_permutation函数相反,它用于生成当前序列的上一个排序.他按照字典对序列进行重新排序,通过存在上一个排序,则将当前序列更改为上一个排序,并返回true;如果当前序列已经是第一个排序,则将序列更改为最后一个排列,并返回false.
vector nums2= {3,2,1};
cout << "Initial permutation: ";
for(int num : nums2){
cout << num << ' ';
}
cout << endl;
//生成上一个排序
while (prev_permutation(nums2.begin(), nums2.end())) {
cout << "Previous Permutation: ";
for(int num:nums2){
cout << num << ' ';
}
cout << endl;
}
memset()是一个用于设置内存块值的函数.
它的原型定义在
void* memset(void* ptr,int value,size_t num);
// 指针 值 重置
memset()函数接受三个参数:
1.ptr:指向要设置值的内存块的指针.
2.value:要设置的值,通常是一个整数.
3.num:要设置的字节数.
memset()函数将ptr指向的内存块的前num个字节设置为value的值.它返回一个指向ptr的指针.
memset()函数通常用于初始化内存块,将其设置为特定的值.
例如,如果要将一个整数数组的所有原始设置为0,可以使用memset()函数如下:
int arr[10];
memset(arr,0,sizeof(arr));
在上述示例中,memset(arr,0,sizeof(arr))将数组arr的所有元素设置为0.
需要注意的是,memset()函数对于非字符类型的数组可能会产生未定义行为.
在处理非字符类型的数组时,更好使用c++中的其他方法,如循环遍历来初始化数组.
memset会将每个byte设置为value.
swap(T &a,T &b)函数接受两个参数:
1.a:要交换值的第一个变量的引用.
2.b:要交换值的第二个变量的引用.
swap()函数通过将第一个变量的值存储到临时变量中,然后将第二个变量的值赋给第一个变量,最后将临时的值赋给第二个变量,实现两个变量值的交换.
swap()函数可以用于交换任意类型的变量,包括基本类型(如整数,浮点数等)和自定义类型(如结构体,类对象等).
以下是一个示例,展示如何使用swap()函数交换两个整数的值:
int a=10;
int b=20;
std::swap(a,b);
reverse()是一个用于反转容器中元素顺序的函数.
它的原型定义在
template
void reverse(BidirIt first,BidirIt last);
reverse()函数接受两个参数:
1.first:指向容器中要反转的第一个元素的迭代器.
2.last:指向容器中要反转的最后一个元素的下一个位置的迭代器.
reverse()函数将 [first , last) 范围内的元素顺序进行反转.
也就是说,它会将 [first , last) 范围内的元素按相反的顺序重新排序.
reverse() 函数可用于反转各种类型的容器,包括数组,向量,链表等.
以下是一个示例,展示如何使用reverse()函数反转的一个整数向量的元素顺序:
#include
#include
#include
int main(){
std::v
}
在上述示例中,std::reverse(vec.begin(),vec.end())将整型向量vec中的元素顺序进行反转,最终输出的结果是 5 4 3 2 1.
需要注意的是,reverse()函数只能用于支持双向迭代器的容器,因为它需要能够向前和向后遍历容器中的元素,对于支持单向迭代器的容器(如前向链表),无法使用reverse()函数进行反转.
unique()是一个用于去除重复的元素的函数.
它的原型定义在
template
ForwardIt unique(ForwardIt first, ForwardIT last);
unique(first,last)函数接受两个参数:
1.first:指向容器中要去重的第一个元素的迭代器.
2.last:指向容器中要去重的最后一个元素的下一个位置的迭代器.
unique()函数将 [first , last) 范围内的相邻重复的元素去除,并放回一个指向去重后范围的尾后迭代器,去重的范围中只保留了第一个出现的元素,后续重复的元素被移除.
unique()函数可用于去除各种类型的容器中的相邻重复元素,包括数组,向量链表等
以下是一个示例,展示如何使用unique()函数去除一个整型向量中的相邻重复元素:
int main()
{
std::vector vec = {1,1,2,2,3,3,3,4,4,5};
//使用unique()函数 vec变成: 1 2 3 4 5 1 2 3 3 4
auto it= std::unique(vec.begin(),vec.end()); //返回5下标
vec.erase(it,vec.end()); //删除下标5之后的数据
for(int num : vec) {
std::cout << num << " ";
}
std::cout << endl;
return 0;
}
需要注意的是:unique()函数只能去除相邻的重复元素,如果容器中存在非相邻的重复元素,则无法去除.
如果需要去除所有重复dui元素,而不仅仅是相邻的重复元素,可以先对容器进行排序,然后再使用unique()函数.
unique()时间复杂度为 O(n).