📜  使用C++中STL函数返回的指针计算索引

📅  最后修改于: 2021-05-30 11:56:22             🧑  作者: Mango

C++中的许多内置函数将指针返回到内存中的位置,该位置给出所需数字的地址,但与计算值容器中的实际索引无关。例如。为了找到代码中的最大元素,我们使用std :: max_element(),它返回内存中的地址,而不是所需元素的索引。

// C++ code to demonstrate return value of
// max_element()
#include 
using namespace std;
  
int main()
{
    // initializing vector
    vector vi = { 1, 4, 5, 6, 3 };
  
    // printing max element
    cout << "The max element is : " 
         << (*max_element(vi.begin(), vi.end()));
  
    // printing position
    // prints position in memory
    cout << "\not_eqThe position of maximum element is : ";
    printf("%d", max_element(vi.begin(), vi.end()));
}

输出:

The max element is : 6
The position of maximum element is : 9583660

需要有一种方法来计算指定容器中所需元素位置的精确索引。本文已经讨论了这些方法。

减去第一个迭代器

在此方法中,我们只减去容器的开始指针,如果是向量,则其“ begin() ”迭代器指向容器的第一个元素的地址,减去该值即可得到所需值wrt的精确索引容器。

// C++ code to demonstrate ways to print exact 
// position by subtracting 1st address
#include 
using namespace std;
  
int main()
{
    // initializing vector
    vector vi = { 1, 4, 5, 6, 3 };
  
    // printing max element
    cout << "The max element is : " 
         << (*max_element(vi.begin(), vi.end()));
  
    // printing position
    // prints wanted position
    cout << "\nThe position of maximum element is : ";
    printf("%d", max_element(vi.begin(), 
                vi.end()) - vi.begin());
    return 0;
}

输出:

The max element is : 6
The position of maximum element is : 3
使用std :: distance()

通过将第一个迭代器作为第一个参数,并将期望的位置作为第二个参数,使用distance()也是计算所需位置的另一种方法。

// C++ code to demonstrate ways to print exact 
// position using distance()
#include 
using namespace std;
  
int main()
{
    // initializing vector
    vector vi = { 1, 4, 5, 6, 3 };
  
    // printing max element
    cout << "The max element is : " 
         << (*max_element(vi.begin(), vi.end()));
  
    // printing position
    // prints wanted position
    cout << "\nThe position of maximum element is : ";
    printf("%d", distance(vi.begin(), 
                max_element(vi.begin(), vi.end())));
    return 0;
}

输出:

The max element is : 6
The position of maximum element is : 3
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”