Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Indeks Unsur dalam Julat C Untuk Gelung?
Cara Menentukan Indeks Objek dalam Julat Berasaskan untuk Gelung
Dalam konteks berasaskan julat untuk gelung, ia selalunya wajar untuk mengakses indeks unsur semasa dalam bekas. Pertimbangkan kod berikut:
vector<int> list; for (auto& elem : list) { int i = elem; }
Dalam senario ini, anda mungkin ingin mengetahui kedudukan elem dalam vektor senarai tanpa mengekalkan lelaran yang berasingan.
Pendekatan Berasaskan Zip
Untuk mencapai matlamat ini, pendekatan "zip" boleh digunakan. Daripada melelakan terus ke atas bekas, anda boleh "zip" dengan indeks di sepanjang jalan.
template <typename T> struct iterator_extractor { typedef typename T::iterator type; }; template <typename T> struct iterator_extractor<T const&> { typedef typename T::const_iterator type; }; template <typename T> class Indexer { public: class iterator { public: typedef std::pair<size_t, typename iterator_extractor<T>::type::reference> reference; iterator(typename iterator_extractor<T>::type it) : _pos(0), _it(it) {} reference operator*() const { return reference(_pos, *_it); } iterator& operator++() { ++_pos; ++_it; return *this; } iterator operator++(int) { iterator tmp(*this); ++*this; return tmp; } bool operator==(const iterator& it) const { return _it == it._it; } bool operator!=(const iterator& it) const { return !(*this == it); } private: size_t _pos; typename iterator_extractor<T>::type _it; }; Indexer(T& t) : _container(t) {} iterator begin() const { return iterator(_container.begin()); } iterator end() const { return iterator(_container.end()); } private: T& _container; }; template <typename T> Indexer<T>& index(T& t) { return Indexer<T>(t); }
Kod ini mencipta kelas Indexer yang menyediakan lelaran yang menggabungkan elemen dan indeksnya dalam pasangan . Dengan menggunakan Indexer ini, anda boleh mengakses indeks dan elemen secara serentak.
Contoh Penggunaan
Kod berikut menunjukkan cara menggunakan pendekatan zip:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9}; for (auto p : index(v)) { cout << p.first << ": " << p.second << "\n"; } return 0; }
Kod ini akan mencetak nilai indeks dan elemen dalam format berikut:
0: 1 1: 2 2: 3 3: 4 4: 5 5: 6 6: 7 7: 8 8: 9
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Indeks Unsur dalam Julat C Untuk Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!