C++でのコード化: 特定のリスト内の要素への参照を返す関数があるとします(戻り値の型や関数の動作は変更できません) 。それは私がそのリスト上の特定の要素にイテレータを得ることができることを参照を、返さ経由 は、どのような方法は、ありますか? おかげで、 ロイリスト内の要素への参照によるリストイテレータの取得
0
A
答えて
0
リストへのアクセス権を持っている場合のみ。とにかくイテレータを使用しようとしている場合は、これを指定する必要があります。
あなたが与えられた基準に一致するまで、再びリストを反復処理し、反復子によって返された各要素をチェックする必要があります。
0
まあ、それは安全ではないの方法で行うことができ、std::list<T>::iterator
がリストノードへのポインタとして実装されていることを前提としています。基本的には、リストノードを囲むアドレスを取得するために値のアドレスを調整する必要があります。これはイテレータの値になります。
実際のコード(Macのgccと打ち鳴らすと連携):
// Offset may vary for different Ts
template <typename T>
std::ptrdiff_t list_node_payload_offset() {
std::list<T> lst;
lst.push_back(T{});
auto lst_begin = lst.begin();
return reinterpret_cast<uint8_t*>(std::addressof(lst.front())) -
*reinterpret_cast<uint8_t**>(std::addressof(lst_begin));
}
#pragma GCC optimize "no-strict-aliasing"
template <typename T>
typename std::list<T>::iterator to_list_iterator(T& t) {
static const auto offset = list_node_payload_offest<T>();
auto node_address = reinterpret_cast<uint8_t*>(std::addressof(t)) - offset;
return *reinterpret_cast<typename std::list<T>::iterator*>(&iter_value);
}
#pragma GCC optimize "strict-aliasing"
関連する問題
- 1. テンプレート内の要素への参照を取得する方法
- 2. 親コンポーネント内の子コンポーネントの要素への参照の取得
- 3. std :: tupleの要素への参照を取得するには?
- 4. ベクトル内の要素への参照
- 5. Vue.jsのメソッドの要素への参照を取得する
- 6. ngのテンプレート内の要素への参照を取得することは
- 7. <script>親要素への参照を取得する
- 8. Java - リストイテレータでリンクリスト内の特定の場所への参照を返します
- 9. std :: listの最後の2つの要素への参照を取得する
- 10. 複数のReact要素への参照によるアクセス
- 11. 未知のデータ構造の子要素への参照を取得するPHP
- 12. 反応中の参照を使わずに要素参照を取得する
- 13. DOM要素への参照の格納
- 14. boost.fusionベクターの要素への参照
- 15. facebox要素への参照の維持
- 16. XmlSchemaを使用してxmlスキーマの要素への参照を取得する
- 17. ポリマー要素内の値の参照
- 18. PHP配列内の要素の参照
- 19. どのようにangle2コンポーネントの親DOM要素参照を取得する
- 20. 親コンポーネント内の子コンポーネントへの参照を取得する
- 21. フラグメント内のLinearLayoutへの参照を取得する
- 22. フラグメント内のLocationManagerへの参照を取得する方法
- 23. Python:内部から関数への参照を取得する
- 24. 上下の配列要素へのアクセス中配列要素への参照
- 25. Visual Studio 2010 Extension内のプロジェクト/参照のリストを取得
- 26. リストイテレータを逆参照できないようにする
- 27. twitter.comで内部オブジェクトモデルのstreamManagerへの参照を取得
- 28. 内部電話への参照の取得接続インスタンス
- 29. Firebaseの要素内のリストを取得するには?
- 30. Gtk.OffscreenWindowカイロサーフェイスへの参照を取得
参照されたオブジェクトは、リストの一部であることを認識していない – UnholySheep
を見てみましょう['std :: find'](http://en.cppreference.com/w/cpp/algorithm/find)。 –
リスト自体にアクセスできない場合は、いいえ。そうした場合、リスト内の要素を 'std :: find'することができます。 – JBL