2011-07-19 3 views
6
std::vector<char> v; 
v.push_back('a'); 
v.push_back('b'); 
v.push_back('c'); 
v.push_back('d'); 
v.push_back('e'); 
v.push_back('f'); 

char c[3] = { 'z', 'x', 'y' }; 

// Want to make abzxyf 
//v.insert(v.begin() + 2, c, c + 3); // it doesn't work as I wanted. 

// Yes it works. but if c is more bigger, it will be crash. 
std::copy(c, c + 3, v.begin() + 2); 

v.clear(); 
v.push_back('a'); 
v.push_back('b'); 
v.push_back('c'); 
v.push_back('d'); 
v.push_back('e'); 
v.push_back('f'); 

// If vector needs more memory, I'd let him grow automactically 
// So I tried this.(expected abcdezxy) 
// But it's result is abcdezxyf. f is still remain. 
std::copy(c, c + 3, std::inserter(v, v.begin() + 5)); 

どのようなアルゴリズムや方法を使用しますか?標準のいくつかの範囲のデータを置き換えるにはどうすればいいですか?

+0

あなたが何をしたいかによって異なります。要素を挿入するか、要素を上書きしますか? – user763305

+1

「データを置き換える」とは、上書きを意味すると思います。 – juanchopanza

+0

あなたがアーカイブしたいものははっきりしていませんが、STLアルゴリズムの 'replace'や' replace_if'があなたの望むことをするでしょう。 – mkaes

答えて

6

sizeof(c)が大きい場合は、copy()の前にresize()と入力してください。

if (sizeof(c) + 2 > v.size()) 
    v.resize(sizeof(c) + 2); 
// now copy 
std::copy(c, c + sizeof(c), v.begin() + 2); 
3

テキスト処理を行いたい場合は、replaceの機能を持つstd::stringを使用することを検討してください。

std::vectorはありません。あなたは、inserteraseを組み合わせた上書きメンバーの適切な組み合わせを使用する必要があります。

関連する問題