ホームページ > バックエンド開発 > C++ > C 範囲ベースの For ループで要素インデックスを取得するにはどうすればよいですか?

C 範囲ベースの For ループで要素インデックスを取得するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-31 02:09:11
オリジナル
847 人が閲覧しました

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

範囲ベースの For ループでの要素の位置の検索

プログラミングでは、反復される要素のインデックスまたは位置を決定することが必要になることがよくあります。以上。コンテナを反復処理する便利な方法を提供する範囲ベースの for ループを使用する場合、別の反復子を使用せずに現在の要素のインデックスを取得できるかどうかという疑問が生じます。

解決策

1.ジッパー技術

方法の 1 つは、ジッパーと呼ばれる技術を使用することです。これには、途中でコンテナとインデックスを組み合わせ、各ペアがインデックスと対応する要素で構成される新しい範囲のペアを作成することが含まれます。

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;
};
ログイン後にコピー

Indexer クラスを使用すると、反復処理が可能になります。コンテナを介してインデックスと要素の両方を同時に取得します。

2. Boost.Range

もう 1 つのオプションには、Boost.Range ライブラリの利用が含まれます。具体的には、boost::adaptors::indexed アダプターを使用して、反復ごとにインデックスと要素の両方を含む派生範囲を作成できます。

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";
}
ログイン後にコピー

boost から取得した結果の範囲を反復することで、次のようになります。 :adaptors::indexed、インデックスと要素は for ループ内でアクセスできます。

3.カスタム反復子

特定のシナリオでは、現在のインデックスを維持するカスタム反復子を作成することが望ましい場合があります。このイテレータを範囲ベースの for ループと組み合わせて使用​​すると、インデックスと要素の両方にアクセスできます。

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; }
};
ログイン後にコピー

カスタム イテレータを定義し、それをコンテナのイテレータ タイプに適合させることにより、次のものを取得できます。 for ループ内で要素とそのインデックスを直接指定します。

以上がC 範囲ベースの For ループで要素インデックスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート