template
type>
forwarditerator remove(
forwarditerator _first,
forwarditerator _last,
const
type& _val
);
將乙個指定的值從指定的區間中[first,last)「刪除」,這裡的「刪除」是指:把區間內」指定值」的位置騰出,用copy的方式把後面」非指定值」逐一的往前移動。
比如:
序列(1234)remove 2後,返回的序列是 1344(3被複製到2的位置,4被複製到3的位置)。
第一層演算法:
template
inline
_fwdit remove(_fwdit _first, _fwdit _last, const _ty& _val)
else
}
最底層演算法:
/*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
****
**_first:第乙個待刪除值的下乙個位置
**_last:指向目標容器最後乙個元素的下乙個位置
** _val:待刪除的值
**_dest:返回值,初始值為目標容器的第乙個指定位置
*****
*****
*****
*****
*****
*****
*****
*****
*****
*****
*******/
template
_init, class
_outit, class
_ty>
inline
_outit _remove_copy(_init _first, _init _last, _outit _dest,
const _ty& _val, _range_checked_iterator_tag)
}return (_dest);
}
remove演算法是穩定的,因為其他元素的相對位置並沒有改變。同時remove演算法並不能直接的刪除特定元素,因此目標的容器大小不變。
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
int _tmain(int argc, _tchar* ar**)
veccontainer.insert(veccontainer.end(), 2);
veccontainer.insert(veccontainer.end(), 5);
veccontainer.insert(veccontainer.end(), 6);
//0 1 2 3 4 2 5 6
vector
vecdata(veccontainer);
cout
<
(cout," "));
cout
<< endl;
cout
<
<2);
copy(veccontainer.begin(), veccontainer.end(),
ostream_iterator(cout," "));
cout
<< endl;
//需要使用備份後的vecdata
cout
<
/推薦用法
STL中的remove問題
我將從remove的複習開始這個條款,因為remove是stl中最糊塗的演算法。誤解remove很容易,驅散所有關於remove行為的疑慮 為什麼它這麼做,它是怎麼做的 是很重要的。這是remove的宣告 templateforwarditerator remove forwarditerator ...
STL 中 remove 的運用
by a code rabbit 今天在看別人的解題報告時,發現這麼一行 remove pack 0 pack strlen pack 0 刪除行中的空格頓時想起前幾天寫的乙個函式 void filterspaces char expression new,char expression pos e...
STL中的remove問題
我將從remove的複習開始這個條款,因為remove是stl中最糊塗的演算法。誤解remove很容易,驅散所有關於remove行為的疑慮 為什麼它這麼做,它是怎麼做的 是很重要的。這是remove的宣告 templateforwarditerator remove forwarditerator ...