2011-07-19 29 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)); 

應該使用什麼算法或方法?如何替換std的某些範圍的數據:: vector

+0

取決於你想要做什麼。你想插入元素還是覆蓋元素? – user763305

+1

我猜「替換數據」意味着覆蓋。 – juanchopanza

+0

目前還不太清楚你想要歸檔的內容,但是也許''替換'或'replace_if'從STL算法會做你想要的。 – mkaes

回答

6

如果sizeof(c)更大,resize()之前的copy()應該這樣做。

例如

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

如果你想做文本處理,你可以考慮使用std::string其中有replace函數。

std::vector沒有。您必須使用覆蓋成員與inserterase的適當組合。