私はstlベクトルの要素にindex []でアクセスするコードを書いていましたが、今はベクトルの塊だけをコピーする必要があります。それはvector.insert(pos, first, last)
のように私が望む機能です...私はintとして最初と最後を除いている。これらの値にイテレータを使うことができますか?C++ STL Vectors:インデックスからイテレータを取得しますか?
答えて
はこれを試してみてください:
vector<Type>::iterator nth = v.begin() + index;
ベクトル
のための素晴らしいと高速@dirkgently (v.begin() + index)
で述べた方法ではなくstd::advance
(v.begin(), index)
最も一般的な方法とランダムアクセスイテレータのためには、あまりにも、一定の時間を動作します。
EDIT使用量の
違い:
std::vector<>::iterator it = (v.begin() + index);
または
std::vector<>::iterator it = v.begin();
std::advance(it, index);
@litbノートの後に追加
。std :: advanceではなく、最初の引数として非constイテレータが必要ですか?これに応じて – goldPseudo
- http://www.sgi.com/tech/stl/advance.html - いいえ。 – bayda
std :: advanceをconstとnon-constイテレータで使用することができます – bayda
Actutally std :: vectorは、必要なときにCタブとして使用するためのものです。 (C++のベクトルの実装のために、私の知る限りでは、標準的な要求 - replacement for array in Wikipedia)例えば このfolowingを行うことは完全に合法である私に従っ:もちろん
int main()
{
void foo(const char *);
sdt::vector<char> vec;
vec.push_back('h');
vec.push_back('e');
vec.push_back('l');
vec.push_back('l');
vec.push_back('o');
vec.push_back('/0');
foo(&vec[0]);
}
、どちらかのfooはアドレスをコピーしてはなりませんパラメータとして渡され、どこかに格納されます。また、vec内の新しい項目を決して押したり、容量を変更することを要求したりしないようにプログラムで確保する必要があります。またはリスクのセグメンテーションフォールト...
は、したがって、あなたのexempleで、それは
vector.insert(pos, &vec[first_index], &vec[last_index]);
私は、なぜ彼らがポインタであればイテレータに抽象化することを決めたのだろうかと疑問に思います...彼らは本質的にこれらの機能を隠しています。 – mpen
コンプライアンスのために?コード内の他の種類のコンテナのベクターインスタンスも簡単に削除できます。 –
&vec [i]はvector <> :: iteratorと必ずしも互換性のないポインタを生成します。 vec.begin()+私はまだあなたのライブラリがそれを定義するイテレータであれば何でもできるという利点があります。たとえば、デバッグモードでのチェックイテレータを含みます。したがって、ポインタ(I/Oなど)を必要としない場合は、常にイテレータを使用する必要があります。 – sellibitze
につながるか、あなたはまたstd::advance
vector<int>::iterator i = L.begin();
advance(i, 2);
を使用することができます。 auto it = std::next(v.begin(), index);
アップデート:C++ 11X対応のコンパイラが必要
これはC++ 11の方法であることに注意してください! std :: nextはstd :: advanceと同じです。これらの関数を用いて算術演算を使うのではなく、スワッピングコンテナの型をもっと簡単にすることができます。また、std :: beginやstd :: endと同様に、C配列のafaikで動作します。 – Zoomulator
std :: advanceは、戻り値ではなく出力として参照を使用するので、馬鹿によって設計されていることにも注意してください。 –
for(auto it = begin(c); it!= end(c); advance(it、n)){...} – Zoomulator
- 1. 任意のイテレータ(C++)から値の型を取得できますか?
- 2. イテレータからconst_iteratorを取得
- 3. ポインタからイテレータを取得
- 4. C++ STL unordered_mapイテレータ問題
- 5. STL出力イテレータに相当するC#はありますか?
- 6. .objからインデックスを取得
- 7. STLクラスからイテレータを「継承する」方法は?
- 8. STL C++の過去のイテレータは何ですか?
- 9. 文字列から大文字のインデックスを取得します
- 10. 特定のUISegmentedControlインデックスからフレームを取得しますか?
- 11. C#のリストボックスのインデックスからテキスト値を取得する方法
- 12. Java strutsはインデックスからプロパティを取得します
- 13. Mootoolsは親から要素の子インデックスを取得します
- 14. C++:マップからイテレータを消去した後、次のイテレータ
- 15. STL hash_mapからすべてのキーを取得するには?
- 16. xtsインデックスから時間を取得
- 17. インデックスから変更を取得できますか?
- 18. バイナリサーチC++ STL
- 19. カスタムコンテナのSTL互換イテレータ
- 20. 削除したアイテムのインデックスをバインディングリストから取得する
- 21. STLコンテナにイテレータのインデックスを検索する - 必要性のテンプレート関数
- 22. STLイテレータ:接頭辞のインクリメントが高速ですか?
- 23. テキストからK-Means Vectors入力
- 24. SQLクエリ - レベルと子インデックスから親インデックスを取得
- 25. C#のolap cubeからデータを取得しますか?
- 26. C++ std :: setのメンバをインデックスで取得する
- 27. から取得し、c#.netで選択しますか?
- 28. から取得し、c#.netで選択しますか?
- 29. istreamから次のfloatを取得しますか?
- 30. インデックスを指定してArrayListからelemntを取得
も参照してください:http://stackoverflow.com/q/2152986/365102 –