📄 cppvector_details.html
字号:
<!-- saved from url=(0022)http://internet.e-mail -->
<HTML>
<HEAD>
<TITLE>C++ Vectors</TITLE>
</HEAD>
<BODY BGCOLOR="FFFFFF">
<TABLE WIDTH="100%" BGCOLOR="EEEEFF"><TR><TD>
<A HREF="index.html">cppreference.com</A> ->
<A HREF="cppvector.html">C++ Vectors</A> ->
Details
</TD></TR></TABLE>
<H1>C++ Vectors</H1>
<HR>
<H2>
<A NAME="Constructors">构造函数</A></H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF"><TR><TD><PRE>
vector();
vector( size_type num, const <A HREF="containers.html">TYPE</A> &val );
vector( const vector &from );
vector( <A HREF="iterators.html">input_iterator</A> start, <A HREF="iterators.html">input_iterator</A> end );
</PRE></TD></TR></TABLE>
<P>
C++ Vectors可以使用以下任意一种参数方式构造:
<UL>
<LI>无参数 - 构造一个空的vector,
<LI>数量(num)和值(val) - 构造一个初始放入num个值为val的元素的Vector
<LI>vector(from) - 构造一个与vector from 相同的vector
<LI>迭代器(start)和迭代器(end) - 构造一个初始值为[start,end)区间元素的Vector(注:半开区间).
</UL>
<p>举例,下面这个实例构造了一个包含5个值为42的元素的Vector</p>
<PRE>
vector<int> v1( 5, 42 );
</PRE>
<p></P>
<hr>
<H2>
<A NAME="Operators">运算符</A></H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF"><TR><TD><PRE>
v1 == v2
v1 != v2
v1 <= v2
v1 >= v2
v1 < v2
v1 > v2
v[]
</PRE></TD></TR></TABLE>
<P>
C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >. 要访问vector中的某特定位置的元素可以使用 [] 操作符.
</P>
<P>两个vectors被认为是相等的,如果:
<OL>
<LI>它们具有相同的容量</LI>
<LI>所有相同位置的元素相等.</LI>
</OL>
vectors之间大小的比较是按照词典规则.
</P>
<I>相关内容:</I>
<STRONG> <A HREF="#at">at()</A>. </STRONG>
<HR>
<H2> <A NAME="assign">assign函数</A> </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
void assign( <A HREF="iterators.html">input_iterator</A> start, <A HREF="iterators.html">input_iterator</A> end );
void assign( size_type num, const <A HREF="containers.html">TYPE</A> &val );
</PRE>
</TD>
</TR>
</TABLE>
<P> assign() 函数要么将区间[start, end)的元素赋到当前vector,或者赋num个值为val的元素到vector中.这个函数将会清除掉为vector赋值以前的内容.</P>
<P> </P>
<HR>
<H2> <A NAME="at">at</A>函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
<A HREF="containers.html">TYPE</A> at( size_type loc );
</PRE>
</TD>
</TR>
</TABLE>
<P> at() 函数 返回当前Vector指定位置<I>loc的元素的引用</I>. at() 函数 比 [] 运算符更加安全, 因为它不会让你去访问到Vector内越界的元素. 例如,
考虑下面的代码:</P>
<PRE>
vector<int> v( 5, 1 );
for( int i = 0; i < 10; i++ ) {
cout << "Element " << i << " is " << v[i] << endl;
}
</PRE>
这段代码访问了vector末尾以后的元素,这将可能导致很危险的结果.以下的代码将更加安全:
<PRE>
vector<int> v( 5, 1 );
for( int i = 0; i < 10; i++ ) {
cout << "Element " << i << " is " << v.at(i) << endl;
}
</PRE>
<P>取代试图访问内存里非法值的作法,at() 函数能够辨别出访问是否越界并在越界的时候抛出一个异常.</P>
<P><I>相关内容:</I> <STRONG> <A HREF="#Operators"> [] 操作符</A> </STRONG> </P>
<HR>
<H2> <A NAME="back">back</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
<A HREF="containers.html">TYPE</A> back();
</PRE>
</TD>
</TR>
</TABLE>
<P>back() 函数返回当前vector最末一个元素的引用.例如: </P>
<PRE>
vector<int> v;
for( int i = 0; i < 5; i++ ) {
v.push_back(i);
}
cout << "The first element is " << v.front()
<< " and the last element is " << v.back() << endl;
</PRE>
<P>这段代码产生如下结果:</P>
<PRE>
The first element is 0 and the last element is 4
</PRE>
<I>相关内容:</I> <STRONG> <A HREF="#front">front().</A> </STRONG>
<HR>
<H2> <A NAME="begin">begin</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
<A HREF="iterators.html">iterator</A> begin();
</PRE>
</TD>
</TR>
</TABLE>
<P>begin()函数返回一个指向当前vector起始元素的<A HREF="iterators.html">迭代器</A>.例如,下面这段使用了一个迭代器来显示出vector中的所有元素:</P>
<PRE>
vector<int> v1( 5, 789 );
vector<int>::iterator it;
for( it = v1.begin(); it != v1.end(); it++ )
cout << *it << endl;
</PRE>
<I>相关内容:</I> <STRONG> <A HREF="#end">end().</A> </STRONG>
<HR>
<H2> <A NAME="capacity">capacity</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
size_type capacity();
</PRE>
</TD>
</TR>
</TABLE>
<P> capacity() 函数 返回当前vector在重新进行内存分配以前所能容纳的元素数量.</P>
<HR>
<H2> <A NAME="clear">clear</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
void clear();
</PRE>
</TD>
</TR>
</TABLE>
<P>clear()函数删除当前vector中的所有元素.</P>
<HR>
<H2> <A NAME="empty">empty</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
bool empty();
</PRE>
</TD>
</TR>
</TABLE>
<P>如果当前vector没有容纳任何元素,则empty()函数返回true,否则返回false.例如,以下代码清空一个vector,并按照逆序显示所有的元素:</P>
<PRE>vector<int> v;
for( int i = 0; i < 5; i++ ) {
v.push_back(i);
}
while( !v.empty() ) {
cout << v.back() << endl;
v.pop_back();
}
</PRE>
<I>相关内容:</I> <STRONG> <A HREF="#size">size()</A> </STRONG>
<HR>
<H2> <A NAME="end">end</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
<A HREF="iterators.html">iterator</A> end();
</PRE>
</TD>
</TR>
</TABLE>
<P> end() 函数返回一个指向当前vector末尾元素的<strong>下一位置</strong>的<A HREF="iterators.html">迭代器</A>.注意,如果你要访问末尾元素,需要先将此迭代器自减1.</P>
<P><I>相关内容:</I> <STRONG> <A HREF="#begin">begin()</A> </STRONG>
</P>
<HR>
<H2> <A NAME="erase">erase</A> 函数 </H2>
<I>语法:</I>
<TABLE BGCOLOR="CCCCFF">
<TR>
<TD>
<PRE>
<A HREF="iterators.html">iterator</A> erase( <A HREF="iterators.html">iterator</A> loc );
<A HREF="iterators.html">iterator</A> erase( <A HREF="iterators.html">iterator</A> start, <A HREF="iterators.html">iterator</A> end );
</PRE>
</TD>
</TR>
</TABLE>
<PRE>erase函数要么删作指定位置loc的元素,要么删除区间[start, end)的所有元素.返回值是指向删除的最后一个元素的下一位置的迭代器.例如:</P>
// 创建一个vector,置入字母表的前十个字符
vector<char> alphaVector;
for( int i=0; i < 10; i++ )
alphaVector.push_back( i + 65 );
int size = alphaVector.size();
vector<char>::iterator startIterator;
vector<char>::iterator tempIterator;
for( int i=0; i < size; i++ )
{
tartIterator = alphaVector.begin();
alphaVector.erase( startIterator );
// Display the vector
for( tempIterator = alphaVector.begin(); tempIterator != alphaVector.end(); tempIterator++ )
cout << *tempIterator;
cout << endl;
} </PRE>
<P> 这段代码将会显示如下输出: </P>
<PRE>
BCDEFGHIJ
CDEFGHIJ
DEFGHIJ
EFGHIJ
FGHIJ
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -