导读:
1.遍历打印vector中的元素
2.insert , erase , clear等的基本用法
3.介绍模板类(STL基本都是模板类, 了解了这个程序应该会有助于理解STL中的容器)
4.如何使用命名空间
5.初始化演示(构造函数另外重载的形式)
6.一些基本操作
7.deque的简单用法
8.list的简单用法(注意这里的merge合并操作)
9.set的简单用法
10.map的简单用法
11.多重映射mulmap
//1.遍历打印vector中的元素
#include "stdafx.h"
#include
#include
using namespace std;
int main(void)
{
vector< int >a;
vector< int >::iterator i;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
for(i=a.begin(); i!=a.end(); ++i){
cout<<(*i)<< endl;
}
return 0;
}
//2.掌握insert , erase , clear等用法
#include "stdafx.h"
#include
> #include
using namespace std;
int main(void)
{
std::vector< int >q;
q.push_back(10);
q.push_back(11);
q.push_back(12);
q.push_back(13);
q.push_back(14);
vector< int >v;
for(int i=0; i<5; ++i){
v.push_back(i);
}
vector< int >::iterator it = v.begin() + 1;
//每次打印5个数,看看为什么是这些数
//insert的基本用法
for (it=v.begin(); it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
it = v.insert(it, 33);
for (it=v.begin()+1; it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
v.insert(it, q.begin()+2, q.end()-1);
for (it=v.begin()+3; it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
v.insert(it, 2, 5);
for (it=v.begin()+5; it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
//erase的基本用法
it = v.begin()+2;
v.erase(it);
for (it=v.begin(); it!=v.end()-4; it++)
cout<<(*it)<< endl;
printf("**************/n");
it = v.begin();
v.erase(it, it + 2);
for (it=v.begin(); it!=v.end()-2; it++)
cout<<(*it)<< endl;
printf("**************/n");
//clear
v.clear();
for (it=v.begin(); it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
return 0;
}
//3.介绍模板类
#include "stdafx.h"
#include< iostream.h >
//定义名为ex_class的类模板
template clas* **_class
{
T value;
public:
ex_class(T v) { value=v; }
void set_value(T v) { value=v; }
T get_value(void) {return value;}
};
//main()函数中测试ex_class类模板
int main(void)
{
//测试int类型数据
ex_class a(5),b(10);
cout<< "a.value:"<< a.get_value()<< endl;
cout<< "b.value:"<< b.get_value()<< endl;
//测试char类型数据
ex_class
ch(?A?);> cout<< "ch.value:"<< ch.get_value()<< endl;
ch.set_value('a');
cout<< "ch.value:"<< ch.get_value()<< endl;
//测试double类型数据
ex_class
x(5.5);> cout<< "x.value:"<< x.get_value()<< endl;
x.set_value(7.5);
cout<< "x.value:"<< x.get_value()<< endl;
return 0;
}
//4.如何使用名字空间
#include "stdafx.h"
#include
> using namespace std;
namespace printA
{
print() {cout<< "using namespace printA….."<< endl; };
}
namespace printB
{
print() {cout<< "using namespace printB….."<< endl; };
}
int main(void)
{
printA::print(); //测试命名空间printA, ::是作用域解析运算符
printB::print();
return 0;
}
//5.构造函数另外重载的形式
#include
> #include
#include
using namespace std;
int ar[10] = { 12, 45, 234, 64, 12, 35, 63, 23, 12, 55 };
char* str = "Hello World";
int main(void)
{
vector vec1(ar, ar+10); //first=ar,last=ar+10,不包括ar+10
vector vec2(str, str+strlen(str)); //first=str,last= str+strlen(str),不包括最后一个
cout<< "vec1:"<< endl;
//打印vec1和vec2,const_iterator是迭代器,后面会讲到
//当然,也可以用for (int i=0; i< vec1.size(); i++)cout << vec[i];输出
//size()是vector的一个成员函数
for(vector /> ::const_iterator
cout<<*p;
cout<< '/n'<< "vec2:"<< endl;
for(vector /> ::const_iterator
cout<< *p1;
getchar();
return 0;
}
//6.一些基本操作
#include "stdafx.h"
#include
> #include
using namespace std;
typedef vector< int >INTVECTOR;//自定义类型INTVECTOR
//测试vector容器的功能
void main(void)
{
//vec1对象初始为空
INTVECTOR vec1;
//vec2对象最初有10个值为6的元素
INTVECTOR vec2(10,6);
//vec3对象最初有3个值为6的元素,拷贝构造
INTVECTOR vec3(vec2.begin(),vec2.begin()+3);
//声明一个名为i的双向迭代器
INTVECTOR::iterator i;
//从前向后显示vec1中的数据
cout<< "vec1.begin()--vec1.end():"<< endl;
for (i =vec1.begin(); i !=vec1.end(); ++i)
cout<< *i <<" ";
cout <
//从前向后显示vec2中的数据
cout<< "vec2.begin()--vec2.end():"<< endl;
for (i =vec2.begin(); i !=vec2.end(); ++i)
cout <<*i <<" ";
cout<< endl;
//从前向后显示vec3中的数据
cout<< "vec3.begin()--vec3.end():"<< endl;
for (i =vec3.begin(); i !=vec3.end(); ++i)
cout <<*i <<" ";
cout <
//测试添加和插入成员函数,vector不支持从前插入
vec1.push_back(2);//从后面添加一个成员
vec1.push_back(4);
vec1.insert(vec1.begin()+1,5);//在vec1第一个的位置上插入成员5
//从vec1第一的位置开始插入vec3的所有成员
vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());
cout<< "after push() and insert() now the vec1 is:" <
for (i =vec1.begin(); i !=vec1.end(); ++i)
cout <<*i <<" ";
cout <
//测试赋值成员函数
vec2.assign(8,1); // 重新给vec2赋值,8个成员的初始值都为1
cout<< "vec2.assign(8,1):" <
for (i =vec2.begin(); i !=vec2.end(); ++i)
cout <<*i <<" ";
cout <
//测试引用类函数
cout<< "vec1.front()="<< vec1.front()<< endl;//vec1第零个成员
cout<< "vec1.back()="<< vec1.back()<< endl;//vec1的最后一个成员
cout<< "vec1.at(4)="<< vec1.at(4)<< endl;//vec1的第五个成员
cout<< "vec1[4]="<< vec1[4]<< endl;
//测试移出和删除
vec1.pop_back();//将最后一个成员移出vec1
vec1.erase(vec1.begin()+1,vec1.end()-2);//删除成员
cout<< "vec1.pop_back() and vec1.erase():" <
for (i =vec1.begin(); i !=vec1.end(); ++i)
cout <<*i <<" ";
cout <
//显示序列的状态信息
cout<< "vec1.size(): "<< vec1.size()<< endl;//打印成员个数
cout<< "vec1.empty(): "<< vec1.empty()<< endl;//清空
}
//7.deque的简单用法
#include "stdafx.h"
#include
> #include
using namespace std;
typedef deque< int >INTDEQUE;//有些人很讨厌这种定义法,呵呵
//从前向后显示deque队列的全部元素
void put_deque(INTDEQUE deque, char *name)
{
INTDEQUE::iterator pdeque;//仍然使用迭代器输出
cout <<"The contents of " <
cout<
}
//测试deqtor容器的功能
void main(void)
{
//deq1对象初始为空
INTDEQUE deq1;
//deq2对象最初有10个值为6的元素
INTDEQUE deq2(10,6);
//声明一个名为i的双向迭代器变量
INTDEQUE::iterator i;
//从前向后显示deq1中的数据
put_deque(deq1,"deq1");
//从前向后显示deq2中的数据
put_deque(deq2,"deq2");
//从deq1序列后面添加两个元素
deq1.push_back(2);
deq1.push_back(4);
cout<< "deq1.push_back(2) and deq1.push_back(4):"<< endl;
put_deque(deq1,"deq1");
//从deq1序列前面添加两个元素
deq1.push_front(5);
deq1.push_front(7);
cout<< "deq1.push_front(5) and deq1.push_front(7):"<< endl;
put_deque(deq1,"deq1");
//在deq1序列中间插入数据
deq1.insert(deq1.begin()+1,3,9);
cout<< "deq1.insert(deq1.begin()+1,3,9):"<< endl;
put_deque(deq1,"deq1");
//测试引用类函数
cout<< "deq1.at(4)="<< deq1.at(4)<< endl;
cout<< "deq1[4]="<< deq1[4]<< endl;
deq1.at(1)=10;
deq1[2]=12;
cout<< "deq1.at(1)=10 and deq1[2]=12 :"<< endl;
put_deque(deq1,"deq1");
//从deq1序列的前后各移去一个元素
deq1.pop_front();
deq1.pop_back();
cout<< "deq1.pop_front() and deq1.pop_back():"<< endl;
put_deque(deq1,"deq1");
//清除deq1中的第2个元素
deq1.erase(deq1.begin()+1);
cout<< "deq1.erase(deq1.begin()+1):"<< endl;
put_deque(deq1,"deq1");
//对deq2赋值并显示
deq2.assign(8,1);
cout<< "deq2.assign(8,1):"<< endl;
put_deque(deq2,"deq2");
}
//8.list的简单用法(注意这里的merge合并操作)
#include "stdafx.h"
#include
> #include
#include
using namespace std;
void PrintIt(list< int >n)
{
for(list< int >::iterator iter=n.begin(); iter!=n.end(); ++iter)
cout<< *iter<< " ";//用迭代器进行输出循环
}
int main(void)
{
list< int >listn1,listn2;
//给listn1,listn2初始化
listn1.push_back(123);
listn1.push_back(0);
listn1.push_back(34);
listn1.push_back(1123);
//now listn1:123,0,34,1123
listn2.push_back(100);
listn2.push_back(12);
//now listn2:12,100
listn1.sort();
listn2.sort();
//给listn1和listn2排序
//now listn1:0,34,123,1123 listn2:12,100
PrintIt(listn1);
cout<< endl;
PrintIt(listn2);
listn1.merge(listn2);
//合并两个排序列表后,listn1:0,12,34,100,123,1123
//注意这里的merge,
//如果没有给listn1和listn2排序,那么上面的输出结果是100,12,123,0,34,1123
//如果只给listn1排序,那么结果是0,34,100,12,123,1123
//如果只给listn2排序,那么结果是12,100,123,0,34,1123
//如果把上面那句换个位置,换成listn2.merge(listn1),然后下面输出listn2,其各种排序情况下的结果都不变
cout<< endl;
PrintIt(listn1);
return 0;
}
//9.set的简单用法
#include "stdafx.h"
#include
> #include
using namespace std;
int main(void)
{
set< int >set1;
set1.insert(1);
set1.insert(3);
set1.insert(17);
set1.insert(7);
set1.insert(20);
set1.insert(10);
for(set< int >::iterator p=set1.begin();p!=set1.end();++p)
cout<< *p<< " ";
//set会给插入的值自动排序
if(set1.insert(15).second)//插入的值如果已经有了就会插入失败(比如set1.insert(17)),没有才会成功,
//插入成功则set1.insert(15).second返回1,否则返回0
{
cout<< "set insert success";
cout<< endl;
for(p=set1.begin();p!=set1.end();++p)
cout<< *p<< " ";
}
else
cout<< "set insert failed";
/*下面这段在vc6下面编译不过去,原因还不知道,但是vc7下面可以,请高手指教
int a[] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0};
multiset< int >A;
A.insert(set1.begin(),set1.end());
A.insert(a,a+10);
cout<< endl;
for(multiset< int >::iterator p2=A.begin();p2!=A.end();++p2)
cout<< *p2<< " "; */
return 0;
}
//10.map的简单用法
#include "stdafx.h"
#include
> #include
::const_iterator>
::const_iterator>
1.遍历打印vector中的元素
2.insert , erase , clear等的基本用法
3.介绍模板类(STL基本都是模板类, 了解了这个程序应该会有助于理解STL中的容器)
4.如何使用命名空间
5.初始化演示(构造函数另外重载的形式)
6.一些基本操作
7.deque的简单用法
8.list的简单用法(注意这里的merge合并操作)
9.set的简单用法
10.map的简单用法
11.多重映射mulmap
//1.遍历打印vector中的元素
#include "stdafx.h"
#include
#include
using namespace std;
int main(void)
{
vector< int >a;
vector< int >::iterator i;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
a.push_back(5);
for(i=a.begin(); i!=a.end(); ++i){
cout<<(*i)<< endl;
}
return 0;
}
//2.掌握insert , erase , clear等用法
#include "stdafx.h"
#include
> #include
using namespace std;
int main(void)
{
std::vector< int >q;
q.push_back(10);
q.push_back(11);
q.push_back(12);
q.push_back(13);
q.push_back(14);
vector< int >v;
for(int i=0; i<5; ++i){
v.push_back(i);
}
vector< int >::iterator it = v.begin() + 1;
//每次打印5个数,看看为什么是这些数
//insert的基本用法
for (it=v.begin(); it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
it = v.insert(it, 33);
for (it=v.begin()+1; it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
v.insert(it, q.begin()+2, q.end()-1);
for (it=v.begin()+3; it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
v.insert(it, 2, 5);
for (it=v.begin()+5; it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
//erase的基本用法
it = v.begin()+2;
v.erase(it);
for (it=v.begin(); it!=v.end()-4; it++)
cout<<(*it)<< endl;
printf("**************/n");
it = v.begin();
v.erase(it, it + 2);
for (it=v.begin(); it!=v.end()-2; it++)
cout<<(*it)<< endl;
printf("**************/n");
//clear
v.clear();
for (it=v.begin(); it!=v.end(); it++)
cout<<(*it)<< endl;
printf("**************/n");
return 0;
}
//3.介绍模板类
#include "stdafx.h"
#include< iostream.h >
//定义名为ex_class的类模板
template clas* **_class
{
T value;
public:
ex_class(T v) { value=v; }
void set_value(T v) { value=v; }
T get_value(void) {return value;}
};
//main()函数中测试ex_class类模板
int main(void)
{
//测试int类型数据
ex_class a(5),b(10);
cout<< "a.value:"<< a.get_value()<< endl;
cout<< "b.value:"<< b.get_value()<< endl;
//测试char类型数据
ex_class
ch(?A?);> cout<< "ch.value:"<< ch.get_value()<< endl;
ch.set_value('a');
cout<< "ch.value:"<< ch.get_value()<< endl;
//测试double类型数据
ex_class
x(5.5);> cout<< "x.value:"<< x.get_value()<< endl;
x.set_value(7.5);
cout<< "x.value:"<< x.get_value()<< endl;
return 0;
}
//4.如何使用名字空间
#include "stdafx.h"
#include
> using namespace std;
namespace printA
{
print() {cout<< "using namespace printA….."<< endl; };
}
namespace printB
{
print() {cout<< "using namespace printB….."<< endl; };
}
int main(void)
{
printA::print(); //测试命名空间printA, ::是作用域解析运算符
printB::print();
return 0;
}
//5.构造函数另外重载的形式
#include
> #include
#include
using namespace std;
int ar[10] = { 12, 45, 234, 64, 12, 35, 63, 23, 12, 55 };
char* str = "Hello World";
int main(void)
{
vector vec1(ar, ar+10); //first=ar,last=ar+10,不包括ar+10
vector vec2(str, str+strlen(str)); //first=str,last= str+strlen(str),不包括最后一个
cout<< "vec1:"<< endl;
//打印vec1和vec2,const_iterator是迭代器,后面会讲到
//当然,也可以用for (int i=0; i< vec1.size(); i++)cout << vec[i];输出
//size()是vector的一个成员函数
for(vector /> ::const_iterator
cout<<*p;
cout<< '/n'<< "vec2:"<< endl;
for(vector /> ::const_iterator
cout<< *p1;
getchar();
return 0;
}
//6.一些基本操作
#include "stdafx.h"
#include
> #include
using namespace std;
typedef vector< int >INTVECTOR;//自定义类型INTVECTOR
//测试vector容器的功能
void main(void)
{
//vec1对象初始为空
INTVECTOR vec1;
//vec2对象最初有10个值为6的元素
INTVECTOR vec2(10,6);
//vec3对象最初有3个值为6的元素,拷贝构造
INTVECTOR vec3(vec2.begin(),vec2.begin()+3);
//声明一个名为i的双向迭代器
INTVECTOR::iterator i;
//从前向后显示vec1中的数据
cout<< "vec1.begin()--vec1.end():"<< endl;
for (i =vec1.begin(); i !=vec1.end(); ++i)
cout<< *i <<" ";
cout <
//从前向后显示vec2中的数据
cout<< "vec2.begin()--vec2.end():"<< endl;
for (i =vec2.begin(); i !=vec2.end(); ++i)
cout <<*i <<" ";
cout<< endl;
//从前向后显示vec3中的数据
cout<< "vec3.begin()--vec3.end():"<< endl;
for (i =vec3.begin(); i !=vec3.end(); ++i)
cout <<*i <<" ";
cout <
//测试添加和插入成员函数,vector不支持从前插入
vec1.push_back(2);//从后面添加一个成员
vec1.push_back(4);
vec1.insert(vec1.begin()+1,5);//在vec1第一个的位置上插入成员5
//从vec1第一的位置开始插入vec3的所有成员
vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());
cout<< "after push() and insert() now the vec1 is:" <
for (i =vec1.begin(); i !=vec1.end(); ++i)
cout <<*i <<" ";
cout <
//测试赋值成员函数
vec2.assign(8,1); // 重新给vec2赋值,8个成员的初始值都为1
cout<< "vec2.assign(8,1):" <
for (i =vec2.begin(); i !=vec2.end(); ++i)
cout <<*i <<" ";
cout <
//测试引用类函数
cout<< "vec1.front()="<< vec1.front()<< endl;//vec1第零个成员
cout<< "vec1.back()="<< vec1.back()<< endl;//vec1的最后一个成员
cout<< "vec1.at(4)="<< vec1.at(4)<< endl;//vec1的第五个成员
cout<< "vec1[4]="<< vec1[4]<< endl;
//测试移出和删除
vec1.pop_back();//将最后一个成员移出vec1
vec1.erase(vec1.begin()+1,vec1.end()-2);//删除成员
cout<< "vec1.pop_back() and vec1.erase():" <
for (i =vec1.begin(); i !=vec1.end(); ++i)
cout <<*i <<" ";
cout <
//显示序列的状态信息
cout<< "vec1.size(): "<< vec1.size()<< endl;//打印成员个数
cout<< "vec1.empty(): "<< vec1.empty()<< endl;//清空
}
//7.deque的简单用法
#include "stdafx.h"
#include
> #include
using namespace std;
typedef deque< int >INTDEQUE;//有些人很讨厌这种定义法,呵呵
//从前向后显示deque队列的全部元素
void put_deque(INTDEQUE deque, char *name)
{
INTDEQUE::iterator pdeque;//仍然使用迭代器输出
cout <<"The contents of " <
cout<
}
//测试deqtor容器的功能
void main(void)
{
//deq1对象初始为空
INTDEQUE deq1;
//deq2对象最初有10个值为6的元素
INTDEQUE deq2(10,6);
//声明一个名为i的双向迭代器变量
INTDEQUE::iterator i;
//从前向后显示deq1中的数据
put_deque(deq1,"deq1");
//从前向后显示deq2中的数据
put_deque(deq2,"deq2");
//从deq1序列后面添加两个元素
deq1.push_back(2);
deq1.push_back(4);
cout<< "deq1.push_back(2) and deq1.push_back(4):"<< endl;
put_deque(deq1,"deq1");
//从deq1序列前面添加两个元素
deq1.push_front(5);
deq1.push_front(7);
cout<< "deq1.push_front(5) and deq1.push_front(7):"<< endl;
put_deque(deq1,"deq1");
//在deq1序列中间插入数据
deq1.insert(deq1.begin()+1,3,9);
cout<< "deq1.insert(deq1.begin()+1,3,9):"<< endl;
put_deque(deq1,"deq1");
//测试引用类函数
cout<< "deq1.at(4)="<< deq1.at(4)<< endl;
cout<< "deq1[4]="<< deq1[4]<< endl;
deq1.at(1)=10;
deq1[2]=12;
cout<< "deq1.at(1)=10 and deq1[2]=12 :"<< endl;
put_deque(deq1,"deq1");
//从deq1序列的前后各移去一个元素
deq1.pop_front();
deq1.pop_back();
cout<< "deq1.pop_front() and deq1.pop_back():"<< endl;
put_deque(deq1,"deq1");
//清除deq1中的第2个元素
deq1.erase(deq1.begin()+1);
cout<< "deq1.erase(deq1.begin()+1):"<< endl;
put_deque(deq1,"deq1");
//对deq2赋值并显示
deq2.assign(8,1);
cout<< "deq2.assign(8,1):"<< endl;
put_deque(deq2,"deq2");
}
//8.list的简单用法(注意这里的merge合并操作)
#include "stdafx.h"
#include
> #include
#include
using namespace std;
void PrintIt(list< int >n)
{
for(list< int >::iterator iter=n.begin(); iter!=n.end(); ++iter)
cout<< *iter<< " ";//用迭代器进行输出循环
}
int main(void)
{
list< int >listn1,listn2;
//给listn1,listn2初始化
listn1.push_back(123);
listn1.push_back(0);
listn1.push_back(34);
listn1.push_back(1123);
//now listn1:123,0,34,1123
listn2.push_back(100);
listn2.push_back(12);
//now listn2:12,100
listn1.sort();
listn2.sort();
//给listn1和listn2排序
//now listn1:0,34,123,1123 listn2:12,100
PrintIt(listn1);
cout<< endl;
PrintIt(listn2);
listn1.merge(listn2);
//合并两个排序列表后,listn1:0,12,34,100,123,1123
//注意这里的merge,
//如果没有给listn1和listn2排序,那么上面的输出结果是100,12,123,0,34,1123
//如果只给listn1排序,那么结果是0,34,100,12,123,1123
//如果只给listn2排序,那么结果是12,100,123,0,34,1123
//如果把上面那句换个位置,换成listn2.merge(listn1),然后下面输出listn2,其各种排序情况下的结果都不变
cout<< endl;
PrintIt(listn1);
return 0;
}
//9.set的简单用法
#include "stdafx.h"
#include
> #include
using namespace std;
int main(void)
{
set< int >set1;
set1.insert(1);
set1.insert(3);
set1.insert(17);
set1.insert(7);
set1.insert(20);
set1.insert(10);
for(set< int >::iterator p=set1.begin();p!=set1.end();++p)
cout<< *p<< " ";
//set会给插入的值自动排序
if(set1.insert(15).second)//插入的值如果已经有了就会插入失败(比如set1.insert(17)),没有才会成功,
//插入成功则set1.insert(15).second返回1,否则返回0
{
cout<< "set insert success";
cout<< endl;
for(p=set1.begin();p!=set1.end();++p)
cout<< *p<< " ";
}
else
cout<< "set insert failed";
/*下面这段在vc6下面编译不过去,原因还不知道,但是vc7下面可以,请高手指教
int a[] = {4, 1, 1, 1, 1, 1, 0, 5, 1, 0};
multiset< int >A;
A.insert(set1.begin(),set1.end());
A.insert(a,a+10);
cout<< endl;
for(multiset< int >::iterator p2=A.begin();p2!=A.end();++p2)
cout<< *p2<< " "; */
return 0;
}
//10.map的简单用法
#include "stdafx.h"
#include
> #include