📄 三十分钟掌握stl.htm
字号:
vAlign=top>
<P style="TEXT-ALIGN: center" align=center><TT><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体"><set></SPAN></TT></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"
vAlign=top>
<P style="TEXT-ALIGN: center" align=center><TT><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">set,
multiset</SPAN></TT></P></TD></TR>
<TR>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"
vAlign=top>
<P style="TEXT-ALIGN: center" align=center><TT><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体"><stack></SPAN></TT></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"
vAlign=top>
<P style="TEXT-ALIGN: center" align=center><TT><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">stack</SPAN></TT></P></TD></TR>
<TR>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"
vAlign=top>
<P style="TEXT-ALIGN: center" align=center><TT><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体"><vector></SPAN></TT></P></TD>
<TD
style="PADDING-RIGHT: 0.75pt; PADDING-LEFT: 0.75pt; PADDING-BOTTOM: 0.75pt; PADDING-TOP: 0.75pt"
vAlign=top>
<P style="TEXT-ALIGN: center" align=center><TT><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">vector,
vector<bool></SPAN></TT></P></TD></TR></TBODY></TABLE></DIV>
<P class=MsoNormal><SPAN lang=EN-US><O:P></O:P></SPAN></P>
<H3><SPAN
style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">名字空间</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 16.0pt"><O:P></O:P></SPAN></H3>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你的编译器可能不能识别名字空间。名字空间就好像一个信封,将标志符封装在另一个名字中。标志符只在名字空间中存在,因而避免了和其他标志符冲突。例如,可能有其他库和程序模块定义了</SPAN><SPAN
lang=EN-US>sort()</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数,为了避免和</SPAN><SPAN
lang=EN-US>STL</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地</SPAN><SPAN
lang=EN-US>sort()</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算法冲突,</SPAN><SPAN
lang=EN-US>STL</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN
lang=EN-US>sort()</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及其他标志符都封装在名字空间</SPAN><SPAN
lang=EN-US>std</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。</SPAN><SPAN
lang=EN-US>STL</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</SPAN><SPAN
lang=EN-US>sort()</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算法编译为</SPAN><SPAN
lang=EN-US>std::sort()</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,从而避免了名字冲突。</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">尽管你的编译器可能没有实现名字空间,你仍然可以使用他们。为了使用</SPAN><SPAN
lang=EN-US>STL</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,可以将下面的指示符插入到你的源代码文件中,典型地是在所有的</SPAN><SPAN
lang=EN-US>#include</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指示符的后面:</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
lang=EN-US>using namespace std;</SPAN></P>
<P class=MsoNormal style="TEXT-INDENT: 21.75pt"><SPAN
lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><O:P></O:P></SPAN></P>
<P class=MsoNormal><SPAN lang=EN-US><O:P></O:P></SPAN></P>
<H2><SPAN
style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">迭代器</SPAN></H2>
<P style="TEXT-INDENT: 24pt"><SPAN
style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,<SPAN
lang=EN-US>C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。<O:P></O:P></SPAN></SPAN></P>
<P><SPAN
style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个<SPAN
lang=EN-US>STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,++操作符用来递增迭代器,以访问容器中的下一个对象。如果迭代器到达了容器中的最后一个元素的后面,则迭代器变成past-the-end值。使用一个past-the-end值得指针来访问对象是非法的,就好像使用NULL或为初始化的指针一样。<O:P></O:P></SPAN></SPAN></P>
<P style="TEXT-INDENT: 21pt"><SPAN
style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">提示<SPAN
lang=EN-US><O:P></O:P></SPAN></SPAN></P>
<P style="TEXT-INDENT: 21pt"><SPAN lang=EN-US
style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 12.0pt">STL不保证可以从另一个迭代器来抵达一个迭代器。例如,当对一个集合中的对象排序时,如果你在不同的结构中指定了两个迭代器,第二个迭代器无法从第一个迭代器抵达,此时程序注定要失败。这是STL灵活性的一个代价。<I>STL不保证检测毫无道理的错误。</I></SPAN><SPAN
lang=EN-US style="FONT-SIZE: 10pt"><O:P></O:P></SPAN></P>
<H3><SPAN
style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">迭代器的类型</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 16.0pt; mso-font-kerning: 0pt"><O:P></O:P></SPAN></H3>
<P><SPAN style="FONT-SIZE: 10pt">对于<SPAN
lang=EN-US>STL数据结构和算法,你可以使用五种迭代器。下面简要说明了这五种类型:<O:P></O:P></SPAN></SPAN></P>
<P
style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; tab-stops: list 36.0pt; mso-list: l2 level1 lfo2"><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><I><SPAN lang=EN-US style="FONT-SIZE: 10pt">Input
iterators</SPAN></I><SPAN lang=EN-US style="FONT-SIZE: 10pt">
提供对数据的只读访问。<O:P></O:P></SPAN></P>
<P
style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; tab-stops: list 36.0pt; mso-list: l2 level1 lfo2"><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><I><SPAN lang=EN-US style="FONT-SIZE: 10pt">Output
iterators</SPAN></I><SPAN lang=EN-US style="FONT-SIZE: 10pt">
提供对数据的只写访问<O:P></O:P></SPAN></P>
<P
style="MARGIN-LEFT: 36pt; TEXT-INDENT: -18pt; tab-stops: list 36.0pt; mso-list: l2 level1 lfo2"><SPAN
lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol">·<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN><I><SPAN lang=EN-US style="FONT-SIZE: 10pt">Forward
iterators</SPAN></I><SPAN lang=EN-US style="FONT-SIZE: 10pt">
提供读写操作,并能向前推进迭代器。<O:P></O:P></SPAN></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -