<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
erase [C++ Reference]
</title>
<meta name="generator" content="DokuWiki Release 2009-12-25c "Lemming"" />
<meta name="robots" content="index,follow" />
<meta name="date" content="2010-01-04T10:33:37-0800" />
<meta name="keywords" content="stl,vector,erase" />
<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="C++ Reference" />
<link rel="start" href="/wiki/" />
<link rel="contents" href="/wiki/stl/vector/erase?do=index" title="Index" />
<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" />
<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&ns=stl:vector" />
<link rel="edit" title="Edit this page" href="/wiki/stl/vector/erase?do=edit" />
<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/_export/xhtml/stl/vector/erase" />
<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/_export/raw/stl/vector/erase" />
<link rel="canonical" href="http://www.cppreference.com/wiki/stl/vector/erase" />
<link rel="stylesheet" media="all" type="text/css" href="/wiki/lib/exe/css.php?s=all&t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php?t=custom1&tseed=1272971091" />
<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print&t=custom1&tseed=1272971091" />
<script type="text/javascript" charset="utf-8" ><!--//--><![CDATA[//><!--
var NS='stl:vector';var JSINFO = {"id":"stl:vector:erase","namespace":"stl:vector"};
//--><!]]></script>
<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?tseed=1272971091" ></script>
<link rel="shortcut icon" href="/wiki/lib/tpl/custom1/images/favicon.png" />
</head>
<body>
<div class="dokuwiki">
<div class="stylehead">
<div class="breadcrumbs">
<span class="bchead">You are here: </span><a href="../../start.html" title="start">C++ Reference</a> » <a href="../../stl/start.html" title="stl:start">C++ Standard Template Library</a> » <a href="../../stl/vector/start.html" title="stl:vector:start">C++ Vectors</a> » <a href="../../stl/vector/erase.html" title="stl:vector:erase">erase</a> </div>
</div>
<div class="page">
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2828341-1";
urchinTracker();
</script>
<!-- wikipage start -->
<h2><a name="erase" id="erase">erase</a></h2>
<div class="level2">
<p>
Syntax:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="co2">#include <vector></span>
iterator erase<span class="br0">(</span> iterator loc <span class="br0">)</span><span class="sy0">;</span>
iterator erase<span class="br0">(</span> iterator start<span class="sy0">,</span> iterator end <span class="br0">)</span><span class="sy0">;</span></pre>
<p>
The erase() function either deletes the element at location loc, or deletes the
elements between start and end (including start but not including end). The
return value is the element after the last element erased.
</p>
<p>
The first version of erase (the version that deletes a single element at
location loc) runs in <a href="../../complexity.html" class="wikilink1" title="complexity">constant time</a> for lists and <a href="../../complexity.html" class="wikilink1" title="complexity">linear time</a> for vectors,
dequeues, and strings. The multiple-element version of erase always takes
<a href="../../complexity.html" class="wikilink1" title="complexity">linear time</a>.
</p>
<p>
For example:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="co1">// Create a vector, load it with the first ten characters of the alphabet</span>
vector<span class="sy0"><</span>char<span class="sy0">></span> alphas<span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> <span class="kw4">int</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> <span class="nu0">10</span><span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">char</span> letters<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st0">"ABCDEFGHIJ"</span><span class="sy0">;</span>
alphas.<span class="me1">push_back</span><span class="br0">(</span> letters<span class="br0">[</span>i<span class="br0">]</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">size_type</span> size <span class="sy0">=</span> alphas.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">iterator</span> startIterator<span class="sy0">;</span>
vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">iterator</span> tempIterator<span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">size_type</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> size<span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
startIterator <span class="sy0">=</span> alphas.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
alphas.<span class="me1">erase</span><span class="br0">(</span> startIterator <span class="br0">)</span><span class="sy0">;</span>
<span class="co1">// Display the vector</span>
<span class="kw1">for</span><span class="br0">(</span> tempIterator <span class="sy0">=</span> alphas.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span> tempIterator <span class="sy0">!=</span> alphas.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span> <span class="sy0">++</span>tempIterator <span class="br0">)</span> <span class="br0">{</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> <span class="sy0">*</span>tempIterator<span class="sy0">;</span>
<span class="br0">}</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> endl<span class="sy0">;</span>
<span class="br0">}</span></pre>
<p>
That code would display the following output:
</p>
<pre class="code">
BCDEFGHIJ
CDEFGHIJ
DEFGHIJ
EFGHIJ
FGHIJ
GHIJ
HIJ
IJ
J</pre>
<p>
In the next example, erase() is called with two iterators to delete a range of
elements from a vector:
</p>
<pre class="c code c++" style="font-family:monospace;"> <span class="co1">// create a vector, load it with the first ten characters of the alphabet</span>
vector<span class="sy0"><</span>char<span class="sy0">></span> alphas<span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> <span class="kw4">int</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> <span class="nu0">10</span><span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">char</span> letters<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st0">"ABCDEFGHIJ"</span><span class="sy0">;</span>
alphas.<span class="me1">push_back</span><span class="br0">(</span> letters<span class="br0">[</span>i<span class="br0">]</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
<span class="co1">// display the complete vector</span>
<span class="kw1">for</span><span class="br0">(</span> vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">size_type</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> alphas.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> alphas<span class="br0">[</span>i<span class="br0">]</span><span class="sy0">;</span>
<span class="br0">}</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> endl<span class="sy0">;</span>
<span class="co1">// use erase to remove all but the first two and last three elements</span>
<span class="co1">// of the vector</span>
alphas.<span class="me1">erase</span><span class="br0">(</span> alphas.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">+</span>2<span class="sy0">,</span> alphas.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">-</span>3 <span class="br0">)</span><span class="sy0">;</span>
<span class="co1">// display the modified vector</span>
<span class="kw1">for</span><span class="br0">(</span> vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">size_type</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> alphas.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> alphas<span class="br0">[</span>i<span class="br0">]</span><span class="sy0">;</span>
<span class="br0">}</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> endl<span class="sy0">;</span></pre>
<p>
When run, the above code displays:
</p>
<pre class="code">
ABCDEFGHIJ
ABHIJ</pre>
<p>
<strong>With all container types you have to be careful when inserting or erasing elements, since it may lead to invalid iterators.</strong>
</p>
<p>
Here is an example that works for std::vector. Especially, vector::erase() invalidates all iterators (and pointers) following the element to be erased. The example erases some elements depending on a condition (it will erase the letters B and D).
</p>
<pre class="c code c++" style="font-family:monospace;"><span class="co2">#include <iostream></span>
<span class="co2">#include <vector></span>
<span class="co2">#include <iterator></span>
using namespace std<span class="sy0">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
vector<span class="sy0"><</span>char<span class="sy0">></span> alphas<span class="sy0">;</span>
<span class="kw1">for</span><span class="br0">(</span> <span class="kw4">int</span> i<span class="sy0">=</span><span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0"><</span> <span class="nu0">10</span><span class="sy0">;</span> i<span class="sy0">++</span> <span class="br0">)</span> <span class="br0">{</span>
<span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">char</span> letters<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="st0">"ABCDEFGHIJ"</span><span class="sy0">;</span>
alphas.<span class="me1">push_back</span><span class="br0">(</span> letters<span class="br0">[</span>i<span class="br0">]</span> <span class="br0">)</span><span class="sy0">;</span>
<span class="br0">}</span>
vector<span class="sy0"><</span>char<span class="sy0">>::</span><span class="me2">iterator</span> iter <span class="sy0">=</span> alphas.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">while</span><span class="br0">(</span> iter <span class="sy0">!=</span> alphas.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">)</span>
<span class="br0">{</span>
<span class="kw1">if</span> <span class="br0">(</span><span class="sy0">*</span>iter <span class="sy0">==</span> <span class="st0">'B'</span> <span class="sy0">||</span> <span class="sy0">*</span>iter <span class="sy0">==</span> <span class="st0">'D'</span><span class="br0">)</span>
iter <span class="sy0">=</span> alphas.<span class="me1">erase</span><span class="br0">(</span> iter <span class="br0">)</span><span class="sy0">;</span>
<span class="kw1">else</span>
<span class="sy0">++</span>iter<span class="sy0">;</span>
<span class="br0">}</span>
copy<span class="br0">(</span>alphas.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">,</span> alphas.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">,</span> ostream_iterator<span class="sy0"><</span>char<span class="sy0">></span><span class="br0">(</span><a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a><span class="sy0">,</span> <span class="st0">""</span><span class="br0">)</span><span class="br0">)</span><span class="sy0">;</span>
<a href="http://www.opengroup.org/onlinepubs/009695399/functions/cout.html"><span class="kw3">cout</span></a> <span class="sy0"><<</span> endl<span class="sy0">;</span>
<span class="br0">}</span></pre>
<p>
When run, the above code displays:
</p>
<pre class="code">
ACEFGHIJ</pre>
<p>
Related Topics: <a href="../../stl/vector/clear.html" class="wikilink1" title="stl:vector:clear">clear</a>, <a href="../../stl/vector/insert.html" class="wikilink1" title="stl:vector:insert">insert</a>, <a href="../../stl/vector/pop_back.html" class="wikilink1" title="stl:vector:pop_back">pop_back</a>
</p>
</div>
<!-- wikipage stop -->
</div>
<div class="clearer"> </div>
<div class="stylefoot">
<div class="meta">
<div class="user">
</div>
<!--
<div class="doc">
stl/vector/erase.txt · Last modified: 01/04/2010 10:33 by rsalz </div>
-->
</div>
</div></div></body>
</html>