📌  相关文章
📜  C++ 程序查找范围和查询,以按 K 索引对 Array 进行逆时针旋转(1)

📅  最后修改于: 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

按 K 索引对数组进行逆时针旋转

在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表示旋转的数组。