codeproject文章翻译(1)
2008-08-19 12:36
344 查看
原文连接:
http://www.codeproject.com/vcpp/stl/stlintroduction.asp#xx656553xx
STL(Standard Template Library标准模板库)指南
前言
STL提供了一些基于容器类的模板和方法。容器类使开发者的处理更快更高效。还有方法,一些我们已知道的算法,提供基于容器的模板操作函数。
STL的优势包括
-安全的模式采集
-灵活的运用
模板
如果你对模板已经比较熟悉可以直接到第二部分。另外这一部分只是简单介绍模板。一个可以被检查认定为是宏的模板。下面的例子是我们定义的一个模板:
template < class T >
class Value
{
T _value;
public:
Value ( T value ) { _value = value; }
T getValue ();
void setValue ( T value );
};
template < class T >
T Value<T>::getValue () { return _value; }
template < class T >
void Value<T>::setValue ( T value ) { _value = value; }
这
个例子定义了存储了一个变量T类型的value和_value的类Value。关键字template后面,在建括号内是参数类型。告诉模板在模板中将要
用到的是什么类型。模板参数列表的最好例子是种类构造器的参数列表 (A good analogy for the template
parameter list is the parameter list for a class
constructor.)。就像一个构造者,模板可以构造出多个。
模板的方法定义在外边也要求使用template关键字,就像上边的一样。用Value类定义一个float数组,我们可以这样做:
Value<float> values[10]; // array of values of type float
这个定义了一个values数组,尖括号告诉我们Value会存储float类型的数据。
如果你想要定义一个表通过使用这个模板类来是实现的话,我们可以这样做:
Template < class T >
class ValueList
{
Value<T> * _nodes.
public:
ValueList ( int noElements )
{
_nodes = new Node<T>[noElements];
}
virtual ~ValueList ()
{
delete [] _nodes;
}
};
这里定义了一个入参大小的基于模板的values的链表。
STL容器种类
没个STL容器都有它自己的模板参数,这个在后面会讨论到。你要选择哪种容器决定自己的需求。根据过去的经验,vector和map这两个是用的最多的。vector适用于简单或者复杂的容器类型,map被用于关联类型上。deque用在基于队列处理方面很好。
就像系统的消息处理。
vector
元素的类型为T。
list
元素类型为T。这个用来存储连接的元素,每个元素的类型都是T。
定义包含下列的头文件:
#include<list>
deque
一个可以放可变长度的元素类型T。队列提供了一种方式允许从任一端插入和删除一个元素的copy,而且支持在队列中任意位
置插入和删除元素,队列遵循各自的操作,
定义包含下列的头文件:
#include<deque>
map
A collection for a varying length sequence of elements of type pair<const Key, T>. The first element of each
pair is the sort key and the second is its associated value. The sequence is represented in a way that permits
lookup, insertion, and removal of an arbitrary element. The key can be a simple as a number or string or as
complex a key class. The key class must support normal comparison operations so that the collection can be
sorted or searched.
集合用于存储一系列双值元素,其长度是可变化的。元素的第一位值是排序关键字,第二位置是其相关值。以某种方式可以
对该序列替进行查找,插入,或删除任意元素的操作。元素的关键字可以是简单的数字,字符串,也可以是一复杂的对象。
如果是复杂的对象作为关键字,则该对象必须支持普通的比较操作
每一个的第一个元素是排序的关键字,第二个是相关的值.
定义包含下列的头文件:
#include <map>
set
A collection that controls a varying length sequence of elements of type
const Key. Each element serves as both a sort key and a value.
The sequence is represented in a way that permits lookup, insertion, and removal
of an arbitrary element.
定义包含下列的头文件:
#include <set>
STL 字符串
STL strings 支持ascii 和 unicode两种字符串。
string
string是ascii字符串容器支持插入和删除操作。
定义包含的头文件:
#include<string>
wstring
wstring是一个支持插入和删除操作的宽字符容器.在MFC中的字符串类是一个提供Format和一些其他对字符串操作的类
CString,CString提供一写高级的方法,比如说Format,TrimLeft,TrimRight 和 LoadString. 可以很容易的提供包含这
些方法的字符串基类.
定义包含的头文件:
#include<xstring>
STL Streams
流提供给开发者一个类,此类输出流元素的变量类型到容器。
stringstream
字符流支持插入元素操作,
http://www.codeproject.com/vcpp/stl/stlintroduction.asp#xx656553xx
STL(Standard Template Library标准模板库)指南
前言
STL提供了一些基于容器类的模板和方法。容器类使开发者的处理更快更高效。还有方法,一些我们已知道的算法,提供基于容器的模板操作函数。
STL的优势包括
-安全的模式采集
-灵活的运用
模板
如果你对模板已经比较熟悉可以直接到第二部分。另外这一部分只是简单介绍模板。一个可以被检查认定为是宏的模板。下面的例子是我们定义的一个模板:
template < class T >
class Value
{
T _value;
public:
Value ( T value ) { _value = value; }
T getValue ();
void setValue ( T value );
};
template < class T >
T Value<T>::getValue () { return _value; }
template < class T >
void Value<T>::setValue ( T value ) { _value = value; }
这
个例子定义了存储了一个变量T类型的value和_value的类Value。关键字template后面,在建括号内是参数类型。告诉模板在模板中将要
用到的是什么类型。模板参数列表的最好例子是种类构造器的参数列表 (A good analogy for the template
parameter list is the parameter list for a class
constructor.)。就像一个构造者,模板可以构造出多个。
模板的方法定义在外边也要求使用template关键字,就像上边的一样。用Value类定义一个float数组,我们可以这样做:
Value<float> values[10]; // array of values of type float
这个定义了一个values数组,尖括号告诉我们Value会存储float类型的数据。
如果你想要定义一个表通过使用这个模板类来是实现的话,我们可以这样做:
Template < class T >
class ValueList
{
Value<T> * _nodes.
public:
ValueList ( int noElements )
{
_nodes = new Node<T>[noElements];
}
virtual ~ValueList ()
{
delete [] _nodes;
}
};
这里定义了一个入参大小的基于模板的values的链表。
STL容器种类
没个STL容器都有它自己的模板参数,这个在后面会讨论到。你要选择哪种容器决定自己的需求。根据过去的经验,vector和map这两个是用的最多的。vector适用于简单或者复杂的容器类型,map被用于关联类型上。deque用在基于队列处理方面很好。
就像系统的消息处理。
vector
元素的类型为T。
list
元素类型为T。这个用来存储连接的元素,每个元素的类型都是T。
定义包含下列的头文件:
#include<list>
deque
一个可以放可变长度的元素类型T。队列提供了一种方式允许从任一端插入和删除一个元素的copy,而且支持在队列中任意位
置插入和删除元素,队列遵循各自的操作,
定义包含下列的头文件:
#include<deque>
map
A collection for a varying length sequence of elements of type pair<const Key, T>. The first element of each
pair is the sort key and the second is its associated value. The sequence is represented in a way that permits
lookup, insertion, and removal of an arbitrary element. The key can be a simple as a number or string or as
complex a key class. The key class must support normal comparison operations so that the collection can be
sorted or searched.
集合用于存储一系列双值元素,其长度是可变化的。元素的第一位值是排序关键字,第二位置是其相关值。以某种方式可以
对该序列替进行查找,插入,或删除任意元素的操作。元素的关键字可以是简单的数字,字符串,也可以是一复杂的对象。
如果是复杂的对象作为关键字,则该对象必须支持普通的比较操作
每一个的第一个元素是排序的关键字,第二个是相关的值.
定义包含下列的头文件:
#include <map>
set
A collection that controls a varying length sequence of elements of type
const Key. Each element serves as both a sort key and a value.
The sequence is represented in a way that permits lookup, insertion, and removal
of an arbitrary element.
定义包含下列的头文件:
#include <set>
STL 字符串
STL strings 支持ascii 和 unicode两种字符串。
string
string是ascii字符串容器支持插入和删除操作。
定义包含的头文件:
#include<string>
wstring
wstring是一个支持插入和删除操作的宽字符容器.在MFC中的字符串类是一个提供Format和一些其他对字符串操作的类
CString,CString提供一写高级的方法,比如说Format,TrimLeft,TrimRight 和 LoadString. 可以很容易的提供包含这
些方法的字符串基类.
定义包含的头文件:
#include<xstring>
STL Streams
流提供给开发者一个类,此类输出流元素的变量类型到容器。
stringstream
字符流支持插入元素操作,
相关文章推荐
- 即将推出codeproject文章翻译,敬请关注
- 最新发表在CodeProject上的关于手机数据传输的文章!
- 使用Command模式实现撤销机制 (Code Project 精选翻译)
- CodeProject上的最近几篇关于IronPython技术的文章
- 我在CodeProject上的第一篇文章
- CodeProject上的最近几篇关于IronPython技术的文章
- CodeProject.com上微软BizTalk平台技术文章集锦
- 在Codeproject.com上post了我的第一篇文章:Custom ComboBox server control for ASP.NET
- C# 字符串性能说想 (Code Project 精选翻译)
- 有感于codeproject文章审核:引用(Reference)而不是拷贝(Copy)
- CodeProject 文章阅读
- C# 字符串性能说想 (Code Project 精选翻译)
- codeproject 几篇asp.net文章
- CodeProject上的最近几篇关于IronPython技术的文章
- Code Project上一篇介绍windbg的文章---经典!
- 2010年4月份codeproject上评分比较高的几篇文章
- .net 垃圾回收学习[http://www.codeproject.com/KB/dotnet/idisposable.aspx][翻译&&学习][2]
- CodeProject - Worker Threads in C# (翻译)
- codeproject 几篇asp.net文章
- Code Project中几篇关于DNN的文章