C++标准模块库是一个提供了公共编程数据结构和函数的模板类集合,如双连接表(list),配对数组(map),可扩展数组(vector),大串的存储操作(rope)等。STL库可以从http://www.sgi.com/tech/stl/ 获取。
STL可以分为以下几类:
#include
#include
#include
using namespace std;
main()
{
vector SS;
SS.push_back("The number is 10");
SS.push_back("The number is 20");
SS.push_back("The number is 30");
cout << "Loop by index:" << endl;
int ii;
for(ii=0; ii < SS.size(); ii++) //第一种方法访问
{
cout << SS[ii] << endl;
}
cout << endl << "Constant Iterator:" << endl;
vector::const_iterator cii;
for(cii=SS.begin(); cii!=SS.end(); cii++)//第二种方法
{
cout << *cii << endl;
}
cout << endl << "Reverse Iterator:" << endl;
vector::reverse_iterator rii;
for(rii=SS.rbegin(); rii!=SS.rend(); ++rii)// 第三种方法
{
cout << *rii << endl;
}
cout << endl << "Sample Output:" << endl;
cout << SS.size() << endl;
cout << SS[2] << endl;
swap(SS[0], SS[2]);
cout << SS[2] << endl;
}
用vector来表示二维、三维数组:
#include
#include
using namespace std;
main()
{
// 声明二维数组的大型并且初始化
vector< vector > vI2Matrix(3, vector(2,0));
vI2Matrix[0][0] = 0;
vI2Matrix[0][1] = 1;
vI2Matrix[1][0] = 10;
vI2Matrix[1][1] = 11;
vI2Matrix[2][0] = 20;
vI2Matrix[2][1] = 21;
cout << "Loop by index:" << endl;
int ii, jj;
for(ii=0; ii < 3; ii++)
{
for(jj=0; jj < 2; jj++)
{
cout << vI2Matrix[ii][jj] << endl;
}
}
}
example 3
:vector三维数组
#include
#include
using namespace std;
main()
{
// Vector length of 3 initialized to 0
vector vI1Matrix(3,0);
// Vector length of 4 initialized to hold another
// vector vI1Matrix which has been initialized to 0
vector< vector > vI2Matrix(4, vI1Matrix);
// Vector of length 5 containing two dimensional vectors
vector< vector< vector > > vI3Matrix(5, vI2Matrix);
...
或者在一条语句中定义:
#include
#include
using namespace std;
main()
{
vector< vector< vector > > vI3Matrix(2, vector< vector > (3, vector(4,0)) );
for(int kk=0; kk<4; kk++)
{
for(int jj=0; jj<3; jj++)
{
for(int ii=0; ii<2; ii++)
{
cout << vI3Matrix[ii][jj][kk] << endl;
}
}
}
}
#include
#include
using namespace std;
main()
{
vector< vector > vI2Matrix; // 声明二维数组
vector A, B;
vector< vector >::iterator iter_ii;
vector::iterator iter_jj;
A.push_back(10);
A.push_back(20);
A.push_back(30);
B.push_back(100);
B.push_back(200);
B.push_back(300);
vI2Matrix.push_back(A);
vI2Matrix.push_back(B);
cout << endl << "Using Iterator:" << endl;
for(iter_ii=vI2Matrix.begin(); iter_ii!=vI2Matrix.end(); iter_ii++)
{
for(iter_jj=(*iter_ii).begin(); iter_jj!=(*iter_ii).end(); iter_jj++)
{
cout << *iter_jj << endl;
}
}
}
构造函数/声明:
方法/操作 | 描述 |
---|---|
vector |
声明一个数据类型为 "T"的vector变量v. |
vector |
声明一个大小为n,包含数据类型T的vector变量 |
vector |
声明一个大小为n,包含数据类型为T,元素的值为t的vector变量 Declaration: vector(size_type n, const T& t) |
vector |
从迭代器开始位置到结束位置拷贝一个vector Declaration: template vector(InputIterator, InputIterator) |
Size 方法/操作:
Method/operator | Description |
---|---|
empty() | Returns bool (true/false). True if empty. Declaration: bool empty() const |
size() | Number of elements of vector. Declaration: size_type size() const |
resize(n, t=T()) | Adjust by adding or deleting elements of vector so that its size is "n". Declaration: void resize(n, t = T()) |
capacity() | Max number of elements of vector before reallocation. Declaration: size_type capacity() const |
reserve(size_t n) | Max number of elements of vector set to "n" before reallocation. Declaration: void reserve(size_t) |
max_size() | Max number of elements of vector possible. Declaration: size_type max_size() const |
Method/operator | Description |
---|---|
erase() clear() |
Erase all elements of vector. Declaration: void clear() |
erase(iterator) erase(begin_iterator,end_iterator) |
Erase element of vector. Returns iterator to next element. Erase element range of vector. Returns iterator to next element. Declarations:
|
= Example: X=Y() |
Assign/copy entire contents of one vector into another. Declaration: vector& operator=(const vector&) |
< | Comparison of one vector to another. Declaration: bool operator<(const vector&, const vector&) |
== | Returns bool. True if every element is equal. Declaration: bool operator==(const vector&, const vector&) |
at(index) v[index] |
Element of vector. Left and Right value assignment: v.at(i)=e; and e=v.at(i); Declaration: reference operator[](size_type n) |
front() v[0] |
First element of vector. (Left and Right value assignment.) Declaration: reference front() |
back() | Last element of vector. (Left and Right value assignment.) Declaration: reference back() |
push_back(const T& value) | Add element to end of vector. Declaration: void push_back(const T&) |
pop_back() | Remove element from end of vector. Declaration: void pop_back() |
assign(size_type n,const T& t) | Assign first n elements a value "t". |
assign(begin_iterator,end_iterator) | Replace data in range defined by iterators. Declaration: |
insert(iterator, const T& t) | Insert at element "iterator", element of value "t". Declaration: iterator insert(iterator pos, const T& x) |
insert(iterator pos, size_type n, const T& x) | Starting before element "pos", insert first n elements of value "x". Declaration: void insert(iterator pos, size_type n, const T& x) |
insert(iterator pos, begin_iterator,end_iterator) | Starting before element "pos", insert range begin_iterator to end_iterator. Declaration: void insert(iterator pos, InputIterator f, InputIterator l) |
swap(vector& v2) | Swap contents of two vectors. Declaration: void swap(vector&) |
Method/operator | Description |
---|---|
begin() | Return iterator to first element of vector. Declaration: const_iterator begin() const |
end() | Return iterator to end of vector (not last element of vector but past last element) Declaration: const_iterator end() const |
rbegin() | Return iterator to first element of vector (reverse order). Declaration: const_reverse_iterator rbegin() const |
rend() | Return iterator to end of vector (not last element but past last element) (reverse order). Declaration: const_reverse_iterator rend() const |
++ | Increment iterator. |
-- | Decrement iterator. |
两个例子:
// Standard Template Library example
#include
#include
using namespace std;
main()
{
list L;
L.push_back(0); // Insert a new element at the end
L.push_front(0); // Insert a new element at the beginning
L.insert(++L.begin(),2); // Insert "2" before position of first argument
// (Place before second argument)
L.push_back(5);
L.push_back(6);
list::iterator i;
for(i=L.begin(); i != L.end(); ++i) cout << *i << " ";
cout << endl;
return 0;
}
#include
#include
using namespace std;
// STL list需要重载 operators =, == and <.
class AAA
{
friend ostream &operator<<(ostream &, const AAA &);
public:
int x;
int y;
float z;
AAA();
AAA(const AAA &);
~AAA(){};
AAA &operator=(const AAA &rhs);
int operator==(const AAA &rhs) const;
int operator<(const AAA &rhs) const;
};
AAA::AAA() // 构造函数
{
x = 0;
y = 0;
z = 0;
}
AAA::AAA(const AAA &in) // 复制构造函数,传值
{
x = copyin.x;
y = copyin.y;
z = copyin.z;
}
ostream &operator<<(ostream &output, const AAA &aaa)
{
output << aaa.x << ' ' << aaa.y << ' ' << aaa.z << endl;
return output;
}
AAA& AAA::operator=(const AAA &rhs)
{
this->x = rhs.x;
this->y = rhs.y;
this->z = rhs.z;
return *this;
}
int AAA::operator==(const AAA &rhs) const
{
if( this->x != rhs.x) return 0;
if( this->y != rhs.y) return 0;
if( this->z != rhs.z) return 0;
return 1;
}
//该函数是为了让STL list支持sort
int AAA::operator<(const AAA &rhs) const
{
if( this->x == rhs.x && this->y == rhs.y && this->z < rhs.z) return 1;
if( this->x == rhs.x && this->y < rhs.y) return 1;
if( this->x < rhs.x ) return 1;
return 0;
}
main()
{
list L;
AAA Ablob ;
Ablob.x=7;
Ablob.y=2;
Ablob.z=4.2355;
L.push_back(Ablob); // 在末尾插入一个新元素
Ablob.x=5;
L.push_back(Ablob); // 传值,用默认的拷贝构造函数
//
Ablob.z=3.2355;
L.push_back(Ablob);
Ablob.x=3;
Ablob.y=7;
Ablob.z=7.2355;
L.push_back(Ablob);
list::iterator i;
for(i=L.begin(); i != L.end(); ++i) cout << (*i).x << " "; // print member
cout << endl;
for(i=L.begin(); i != L.end(); ++i) cout << *i << " "; // print with overloaded operator
cout << endl;
cout << "Sorted: " << endl;
L.sort();
for(i=L.begin(); i != L.end(); ++i) cout << *i << " "; // print with overloaded operator
cout << endl;
return 0;
}
7 5 5 3 7 2 4.2355 5 2 4.2355 5 2 3.2355 3 7 7.2355 Sorted: 3 7 7.2355 5 2 3.2355 5 2 4.2355 7 2 4.2355
Function | vector | list |
---|---|---|
constructor | yes | yes |
destructor | yes | yes |
empty() | yes | yes |
size() | yes | yes |
resize() | yes | yes |
capacity() | yes | no |
reserve() | yes | no |
max_size() | yes | yes |
erase() | yes | yes |
clear() | yes | yes |
operator= | yes | yes |
operator< | yes | yes |
operator== | yes | yes |
operator[] | yes | no |
at() | yes | no |
front() | yes | yes |
back() | yes | yes |
push_back() | yes | yes |
pop_back() | yes | yes |
assign() | yes | yes |
insert() | yes | yes |
swap() | yes | yes |
push_front() | no | yes |
pop_front() | no | yes |
merge() | no | yes |
remove() | no | yes |
remove_if() | no | yes |
reverse() | no | yes |
sort() | no | yes |
splice() | no | yes |
unique() | no | yes |