📅  最后修改于: 2023-12-03 15:14:01.178000             🧑  作者: Mango
在编写C++程序时,有时需要查找数组范围或查询特定的元素。此外,还可能需要对数组进行旋转操作。本文将介绍如何在C++中实现这些操作。
在C++中,使用STL中的标准库函数std::lower_bound()
和std::upper_bound()
可以查找数组范围。
下面是一个例子,从数组arr
中查找值为x
的范围:
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int arr[] = { 1, 2, 4, 4, 5, 6, 8, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
int x = 4;
int* it1 = lower_bound(arr, arr + n, x);
int* it2 = upper_bound(arr, arr + n, x);
cout << "范围:[" << it1 - arr << ", " << it2 - arr << ")" << endl;
return 0;
}
输出结果如下:
范围:[2, 4)
代码解析:
lower_bound
函数返回第一个大于等于x
的元素指针,upper_bound
函数返回第一个大于x
的元素指针。因此,范围的左端点为it1 - arr
,右端点为it2 - arr
。
在C++中,使用STL中的标准库函数std::find()
可以查询特定元素。
下面是一个例子,从数组arr
中查找值为x
的元素,并返回其下标:
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int arr[] = { 1, 2, 4, 4, 5, 6, 8, 9 };
int n = sizeof(arr) / sizeof(arr[0]);
int x = 4;
int* it = find(arr, arr + n, x);
if (it == arr + n) {
cout << "未找到" << endl;
} else {
cout << "下标:" << it - arr << endl;
}
return 0;
}
输出结果如下:
下标:2
代码解析:
find()
函数返回第一个等于x
的元素指针,如果未找到,则返回arr + n
。
在C++中,使用STL中的标准库函数std::rotate()
可以对数组进行旋转操作。
下面是一个例子,从数组arr
的第k
个位置开始逆时针旋转:
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 2;
rotate(arr, arr + k, arr + n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
输出结果如下:
3 4 5 6 1 2
代码解析:
rotate()
函数接受三个参数,分别表示旋转开始、旋转结束和旋转位置。上面的代码中,arr + k
表示从第k
个位置开始旋转,arr + n
表示旋转结束,arr
表示旋转的数组。