Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การคำนวณ Index จาก Pointer ที่ STL Functions คืนค่าใน C++


หลายฟังก์ชันใน STL คืนค่าเป็น iterator/pointer (เช่น max_element(), find()) ซึ่งชี้ไปที่ตำแหน่งในหน่วยความจำ แต่ไม่ได้บอก index โดยตรง บทความนี้แสดงวิธีหา index จาก pointer/iterator ที่ได้

วิธี 1: ลบ iterator ตัวแรก (Pointer Arithmetic)

iterator ของ vector/random-access container รองรับการลบกันได้ → ได้ระยะห่าง (index)

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> vec = { 10, 40, 50, 60, 30 };
    cout << "Max element is: " << (*max_element(vec.begin(), vec.end())) << endl;
    cout << "Index of max element: ";
    cout << (max_element(vec.begin(), vec.end()) - vec.begin());
}

เอาต์พุท

Max element is: 60
Index of max element: 3

วิธี 2: ใช้ std::distance() (Generic, รองรับทุก iterator category)

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> vec = { 10, 40, 50, 60, 30 };
    cout << "Max element is: " << (*max_element(vec.begin(), vec.end())) << endl;
    cout << "Index of max element: ";
    cout << distance(vec.begin(), max_element(vec.begin(), vec.end()));
}

เอาต์พุท

Max element is: 60
Index of maximum element: 3

การเลือกใช้

วิธีเหมาะกับหมายเหตุ
Pointer/Iterator subtractionRandom-access iterators (vector, array, deque, string)เร็วที่สุด O(1)
std::distance()ทุก iterator category (list, set, map, forward_list)O(n) สำหรับ non-random-access

สรุป

ใช้ it - container.begin() สำหรับ vector/array ใช้ distance() สำหรับ container อื่นเพื่อความปลอดภัยและ generic