2011-01-26 8 views
2

C++でvectorの真ん中に値を追加する方法はありますか?std :: vectorの途中に追加

vector <string> a; 
// a gets filled up with "abcd", "wertyu", "dvcea", "eafdefef", "aeefr", etc 

を、私は文字列のいずれかを壊すとバック​​vectorに作品のすべてを入れたい:私は持っていると言います。どうすればいい?私が壊す文字列はどこでも、インデックス= 0、中間のどこか、またはインデックス= a.size() - 1です。

答えて

5

あなたはしかし、これは非常に効率的ではありません

v.insert(v.begin() + i, valueToInsert); 

を書き込むことによって、位置ivectorに挿入することができます。要素が挿入された後の要素の数に比例して時間的に実行されます。文字列を分割して追加する場合は、O(1)の挿入と削除をどこでもサポートするstd::listを使用する方がずっと良いでしょう。

+2

まあ。私のベクトルはかなり短く、パフォーマンスは問題ではありません。まだ。私は何らかの理由でベクタを使用しなければならないと思います。私は確認する必要があります – calccrypto

+4

パフォーマンスはすべて問題のデータの量に依存します。私はベクトルを半分メガ程度のリストに比べてパフォーマンスにはかなり良いと感じています。 –

+3

CPUがキャッシュプリフェッチを行うことができず、各リンクが間接的なポインタ検索であるため、std :: lists <は本当に長いリストを取得します。 –

1

あなたはそれを行うことができますが、それは本当に遅いようになります。

int split = 3; // where to split 
a.insert(a.begin()+index, a[index].substr(0, split)); 
a[index+1] = a[index+1].substr(split); 
関連する問題