STL之remove演算法詳解

2022-09-08 10:54:14 字數 2301 閱讀 8719

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 ...