Java プロジェクトを C++ プロジェクトに変換しようとしています。Java プロジェクトでは ArrayList を使用しましたが、C++ で行ったことを処理する最善の方法がわかりません。
現在、私は std::vector を使用しています。これは、任意の位置の要素にアクセスできることと、挿入メソッドがあるためです。Java ArrayList のように、ベクター内の特定の位置 (int p) に要素を挿入し、現在 p にある要素 (存在する場合) を p+1 にシフトできるようにしたいと考えています。そして、後続の要素も同様にシフトされます。
単一のエントリの std::vector.insert は次のようになります。
iterator insert (iterator position, const value_type& val);
そしてhttp://www.cplusplus.com/reference/vector/vector/insert/からの説明は言う
ベクターは配列を基になるストレージとして使用するため、ベクターの末尾以外の位置に要素を挿入すると、コンテナーは位置の後にあったすべての要素を新しい位置に再配置します。
これは、insert が実際に p+1 ではなく p に新しい要素を配置することを意味しますか? 現在pにある要素もシフトしませんか?
また、insert メソッドが数値インデックスだけでなく反復子を受け取るのはなぜですか? 利点がわかりません。任意の位置に挿入するのが難しくなるだけです。そこで反復することなく、特定の場所にイテレータを構築する方法はありますか? http://www.cplusplus.com/reference/iterator/RandomAccessIterator/でのみ比較が表示されます