今天,我们试着使用标准模板库吧.
这里我只举两个例子,一个是LIST,一个是VECTOR,如果用的好的话,你的程序维护起来将会更容易的.
呵呵,我这里把它们都注释了,如果你要测试哪一个,你就取消那个注释 ,我是应为要在这里演示各种功能,所以注释的.
好了,贴代码了:
// STL.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void PrintString( string & strToPrint )
{
cout<<strToPrint<<endl;
}
void PrintInt( int & n )
{
cout<<n<<endl;
}
class example
{
public:
bool operator () (string & str )
{
return str == "BEYOND!";
};
};
int main(int argc, char* argv[])
{
/*list<string> list_string;
list<string>::iterator StringIterator;
list_string.push_back( "Hello World!" );
list_string.push_back( "Simple One!" );
list_string.push_back( "Simple One!" );
list_string.push_back( "Simple One!" );
list_string.push_back( "Hello World!" );
list_string.push_back( "BEYOND!" );
list_string.push_back( "我是中国人!" );*/
/*------------------------------------------------------------*/
循环遍历整个list
/*------------------------------------------------------------*/
/*for_each(list_string.begin(),list_string.end(),PrintString);
//推荐使用,这里,它会调用PrintString( string & strToPrint )函数,参数strToPrint值来自list中的元素*/
/*for( StringIterator = list_string.begin(); StringIterator != list_string.end(); ++StringIterator)
{
cout<<*StringIterator<<endl;
}*/
/*------------------------------------------------------------*/
查找list中的元素
/*------------------------------------------------------------*/
/*StringIterator = find( list_string.begin(),list_string.end(),"BEYOND!" );
//StringIterator = find_if( list_string.begin(), list_string.end(), example() );
if( StringIterator == list_string.end() )
cout<<"Not Fond It!"<<endl;
else
cout<<*StringIterator<<endl;
//查找某个元素*/
/*list<string> list_target;
list_target.push_back("BEYOND!");
list_target.push_back( "我是中国人!" );
StringIterator = search(list_string.begin(),list_string.end(),
list_target.begin(),list_target.end());
if ( StringIterator == list_string.end() )
cout<<"Not Fond It!"<<endl;
else
for_each(list_target.begin(),list_target.end(),PrintString);
//查找一个list中的某个部分是否包含另一个list中的某个部分*/
/*------------------------------------------------------------*/
排序list中的元素
/*------------------------------------------------------------*/
/*
for_each(list_string.begin(),list_string.end(),PrintString);
list_string.sort(); //排序list中的元素。
for_each(list_string.begin(),list_string.end(),PrintString);
*/
/*------------------------------------------------------------*/
插入list中的元素
/*------------------------------------------------------------*/
/*list_string.insert(list_string.begin(),"Begin......"); //在头不插入
list_string.insert(list_string.end(),"End......"); //在尾部插入
string arrString[2] = { "00000",
"6"
};
list_string.insert(list_string.end(),&arrString[0],&arrString[1]);
//在list的某个位置插入一定范围的所有元素到list中,如果没有就把范围开始的元素插入,范围结束不插入
for_each(list_string.begin(),list_string.end(),PrintString);*/
/*------------------------------------------------------------*/
删除list中的元素
/*------------------------------------------------------------*/
/*list_string.pop_front(); //在头部删除
list_string.pop_back(); //在尾部删除*/
//list_string.remove( "BEYOND!" ); //删除BEYOND!这个元素,没有则一个不删,改变list大小
/*StringIterator = remove( list_string.begin(), list_string.end(), "Hello World!" );
//不改变list大小,
//返回一个新的结尾的iterator。从头到这个新的结尾的范围包含了删除后剩下的元素。
//我们可以用list成员函数erase函数来删除从新结尾到老结尾的部分。
for_each(list_string.begin(),StringIterator,PrintString);*/
/*-------------------------------------------------------------*/
如果能够有效地使用vector容器,以后就不用再去使用C类型的动态数组了
vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。既然
是数组,当然支持随机访问了。
/*-------------------------------------------------------------*/
//vector<int> n_vector(10,0); //包含有十个数据,初始化为0
//vector<int>::iterator n_iterator;
/*cout << n_vector.front() << endl; //返回第一个数据,如果不为空的话
cout << *n_vector.rbegin()<< endl; //传回逆向的第一个数据
n_vector.resize(10); //从新指定容器容量为10
n_vector.reserve(20); //保留20个元素的容量
cout << n_vector.size() << endl; //返回容器中实际元素的个数
n_vector.assign(10,1); //将10个1的拷贝赋值给n_vector
n_vector.push_back(10); //在最后添加数据
if( n_vector.empty() ) cout << "empty" << endl; //判断VECTOR是否为空
cout << n_vector.size() << endl; //得到VECTOR的大小
cout << n_vector.capacity() << endl; //返回容器容量*/
/*n_vector[1] = 1; //给1位置赋值
n_vector.at(2) = 2; //给2位置赋值
cout << n_vector.at(1) << endl; //得到1位置的值
cout << n_vector[2] << endl; //得到1位置的值*/
/*vector<int> n_vec;
n_vec.reserve(10);
try
{
int n1 = n_vec[1]; // 不进行越界检查
//int n2 = n_vec.at(2); // 越界检查,如果越界将抛出异常
}
catch( const exception& e )
{
cout << e.what();
}*/
/*//插入数据
vector<int> n(5,2);
n_vector.insert( n_vector.begin(), 36 ); //在开始处插入数据36
n_vector.insert( n_vector.end(), 5, 37 ); //在结尾处插入5个37
n_vector.insert( n_vector.begin(), n.begin(), n.end() ); //在开始处插入容器n
n_vector.insert( &n_vector[7], n.begin(), n.end() ); //在位置7的后面处插入容器n*/
/*//删除vector中的数据
n_vector.pop_back(); //删除最后的元素,容器容量不变
n_vector.clear(); //删除所有数据,不清空容器容量
cout << n_vector.max_size() << endl; //返回容器中最大可以存放的数据量
n_vector.erase( n_vector.begin(), n_vector.end() ); //清空容器的开始和结束区间的容量
cout << n_vector.capacity() << endl; //返回容器容量*/
/*------------------------------------------------------------*/
循环遍历VECTOR
/*------------------------------------------------------------*/
//for_each( n_vector.begin(), n_vector.end(), PrintInt );
return 0;
}
搞定,BYE!