Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Indeks Unsur dalam Julat C Untuk Gelung?

Bagaimanakah Saya Boleh Mendapatkan Indeks Unsur dalam Julat C Untuk Gelung?

Barbara Streisand
Lepaskan: 2024-12-31 02:09:11
asal
847 orang telah melayarinya

How Can I Get Element Indices in C   Range-Based For Loops?

Mencari Kedudukan Elemen dalam Range-Based Untuk Gelung

Dalam pengaturcaraan, selalunya perlu untuk menentukan indeks atau kedudukan elemen yang diulang habis. Apabila menggunakan berasaskan julat untuk gelung, yang menawarkan cara yang mudah untuk lelaran melalui bekas, persoalan timbul jika mungkin untuk mendapatkan semula indeks elemen semasa tanpa menggunakan lelaran yang berasingan.

Penyelesaian

1. Teknik Zip

Satu kaedah melibatkan penggunaan teknik yang dipanggil zip. Ini melibatkan menggabungkan bekas dengan indeks di sepanjang jalan, mencipta julat pasangan baharu di mana setiap pasangan terdiri daripada indeks dan elemen yang sepadan.

struct Indexer {
  class iterator {
    iterator(typename T::iterator it): _pos(0), _it(it) {}
    std::pair<size_t, typename T::reference> operator*() const { return std::make_pair(_pos, *_it); }
    // ...
  };
  iterator begin() const { return iterator(_container.begin()); }
  iterator end() const { return iterator(_container.end()); }
private:
  T& _container;
};
Salin selepas log masuk

Dengan menggunakan kelas Indexer, ia menjadi mungkin untuk mengulang atas bekas dan dapatkan kedua-dua indeks dan elemen secara serentak.

2. Boost.Range

Pilihan lain melibatkan penggunaan perpustakaan Boost.Range. Khususnya, rangsangan::penyesuai::penyesuai terindeks boleh digunakan untuk mencipta julat terbitan yang merangkumi kedua-dua indeks dan elemen untuk setiap lelaran.

std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
for (auto const& [idx, elem]: boost::adaptors::indexed(v)) {
  std::cout << idx << ": " << elem << "\n";
}
Salin selepas log masuk

Dengan melelaran ke atas julat terhasil yang diperoleh daripada rangsangan: :adaptors::indexed, indeks dan elemen boleh diakses dalam gelung for.

3. Iterator Tersuai

Dalam senario tertentu, mungkin wajar untuk mencipta lelaran tersuai yang mengekalkan indeks semasa. Peulang ini boleh digunakan bersama dengan gelung berasaskan julat untuk mengakses kedua-dua indeks dan elemen.

class IndexedIterator {
private:
  container_type* _container;
  size_t _index;
public:
  IndexedIterator(container_type* c) : _container(c), _index(0) {}
  bool operator!=(const IndexedIterator& other) const { return _container != other._container || _index != other._index; }
  std::pair<size_t, value_type> operator*() const { return std::make_pair(_index, *_container[_index]); }
  IndexedIterator& operator++() { _index++; return *this; }
};
Salin selepas log masuk

Dengan mentakrifkan lelaran tersuai dan menyesuaikannya dengan jenis lelaran bekas, adalah mungkin untuk mendapatkan elemen dan indeksnya terus dalam gelung for.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Indeks Unsur dalam Julat C Untuk Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan