C++中所有容器及算法的详细列子(包括其函数的使用)

来源:互联网 发布:男士化妆品 知乎 编辑:程序博客网 时间:2024/06/05 19:24

在学C++的时候学到了容器和算法。看了资料,将所有的demo罗列出来,其中代码中全部注释,没一个带有=============的为一个main函数,用到的头文件都写在最前面,将注释去掉就可以直接运行。

//============================================================================// Name        : ACC.cpp// Author      : zhubin// Version     :// Copyright   : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>#include <algorithm>#include <vector>#include <stdlib.h>#include <string>#include <numeric>#include <list>#include <set>#include <stack>#include <valarray>#include <math.h>#include <map>#include <deque>using namespace std;///**// *// * //========================= list 容器数据===================================// * *//*//创建一个 list 容器的实例 LISTINTtypedef list<int> LISTINT;//创建一个 list 容器的实例 LISTCHARtypedef list<int> LISTCHAR;void main(void) {//--------------------------//用 list 容器处理整型数据//--------------------------//用 LISTINT 创建一个名为 listOne 的 list 对象LISTINT listOne;//声明 i 为迭代器LISTINT::iterator i;//从前面向 listOne 容器中添加数据listOne.push_front(2);listOne.push_front(1);//从后面向 listOne 容器中添加数据listOne.push_back(3);listOne.push_back(4);//从前向后显示 listOne 中的数据cout << "listOne.begin()--- listOne.end():" << endl;for (i = listOne.begin(); i != listOne.end(); ++i)cout << *i << " ";cout << endl;//从后向后显示 listOne 中的数据LISTINT::reverse_iterator ir;cout << "listOne.rbegin()---listOne.rend():" << endl;for (ir = listOne.rbegin(); ir != listOne.rend(); ir++) {cout << *ir << " ";}cout << endl;//使用 STL 的 accumulate(累加)算法int result = accumulate(listOne.begin(), listOne.end(), 0);cout << "Sum=" << result << endl;cout << "------------------" << endl;//--------------------------//用 list 容器处理字符型数据//--------------------------//用 LISTCHAR 创建一个名为 listOne 的 list 对象LISTCHAR listTwo;//声明 i 为迭代器LISTCHAR::iterator j;//从前面向 listTwo 容器中添加数据listTwo.push_front('A');listTwo.push_front('B');//从后面向 listTwo 容器中添加数据listTwo.push_back('x');listTwo.push_back('y');//从前向后显示 listTwo 中的数据cout << "listTwo.begin()---listTwo.end():" << endl;for (j = listTwo.begin(); j != listTwo.end(); ++j)cout << char(*j) << " ";cout << endl;//使用 STL 的 max_element 算法求 listTwo 中的最大元素并显示j = max_element(listTwo.begin(), listTwo.end());cout << "The  maximum  element  in  listTwo  is: " << char(*j) << endl;}*////**// *// * //========================= vector 容器数据===================================// * *//*typedef vector<int> 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 << endl;//从前向后显示 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 << endl;//测试添加和插入成员函数vec1.push_back(2);vec1.push_back(4);vec1.insert(vec1.begin()+1,5);vec1.insert(vec1.begin()+1,vec3.begin(),vec3.end());cout<<"push() and insert():" <<endl;for (i =vec1.begin(); i !=vec1.end(); ++i)cout << *i << " ";cout << endl;//测试赋值成员函数vec2.assign(8,1);cout<<"vec2.assign(8,1):" <<endl;for (i =vec2.begin(); i !=vec2.end(); ++i)cout << *i << " ";cout << endl;//测试引用类函数cout<<"vec1.front()="<<vec1.front()<<endl;cout<<"vec1.back()="<<vec1.back()<<endl;cout<<"vec1.at(4)="<<vec1.at(4)<<endl;cout<<"vec1[4]="<<vec1[4]<<endl;//测试移出和删除vec1.pop_back();vec1.erase(vec1.begin()+1,vec1.end()-2);cout<<"vec1.pop_back() and vec1.erase():" <<endl;for (i =vec1.begin(); i !=vec1.end(); ++i)cout << *i << " ";cout << endl;//显示序列的状态信息cout<<"vec1.capacity(): "<<vec1.capacity()<<endl;cout<<"vec1.max_size(): "<<vec1.max_size()<<endl;cout<<"vec1.size(): "<<vec1.size()<<endl;cout<<"vec1.empty(): "<<vec1.empty()<<endl;//vector 序列容器的运算cout<<"vec1==vec3: "<<(vec1==vec3)<<endl;cout<<"vec1<=vec3: "<<(vec1<=vec3)<<endl;}*////**// *// * //========================= deque 容器数据===================================// * *//*typedef deque<int> INTDEQUE;//从前向后显示 deque 队列的全部元素void put_deque(INTDEQUE deque, char *name) {INTDEQUE::iterator pdeque;cout << "The contents of " << name << " : ";for (pdeque = deque.begin(); pdeque != deque.end(); pdeque++)cout << *pdeque << " ";cout << endl;}//测试 deqtor 容器的功能void main(void) {//deq1 对象初始为空INTDEQUE deq1;//deq2 对象最初有 10 个值为 6 的元素INTDEQUE deq2(10, 6);//deq3 对象最初有 3 个值为 6 的元素INTDEQUE deq3(deq2.begin(), deq2.begin() + 3);//声明一个名为 i 的双向迭代器变量INTDEQUE::iterator i;//从前向后显示 deq1 中的数据put_deque(deq1, "deq1");//从前向后显示 deq2 中的数据put_deque(deq2, "deq2");//从前向后显示 deq3 中的数据put_deque(deq3, "deq3");//从 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.front()=" << deq1.front() << endl;cout << "deq1.back()=" << deq1.back() << endl;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");//显示序列的状态信息cout << "deq1.max_size(): " << deq1.max_size() << endl;cout << "deq1.size(): " << deq1.size() << endl;cout << "deq1.empty(): " << deq1.empty() << endl;//deqtor 序列容器的运算cout << "deq1==deq3: " << (deq1 == deq3) << endl;cout << "deq1<=deq3: " << (deq1 <= deq3) << endl;}*////**// *// * //========================= list 容器数据===================================// * *//*typedef list<int> INTLIST;//从前向后显示 list 队列的全部元素void put_list(INTLIST list, char *name) {INTLIST::iterator plist;cout << "The contents of " << name << " : ";for (plist = list.begin(); plist != list.end(); plist++)cout << *plist << " ";cout << endl;}//测试 list 容器的功能void main(void) {//list1 对象初始为空INTLIST list1;//list2 对象最初有 10 个值为 6 的元素INTLIST list2(10, 6);//list3 对象最初有 3 个值为 6 的元素INTLIST list3(list2.begin(), --list2.end());//声明一个名为 i 的双向迭代器INTLIST::iterator i;//从前向后显示各 list 对象的元素put_list(list1, "list1");put_list(list2, "list2");put_list(list3, "list3");//从 list1 序列后面添加两个元素list1.push_back(2);list1.push_back(4);cout << "list1.push_back(2) and list1.push_back(4):" << endl;put_list(list1, "list1");//从 list1 序列前面添加两个元素list1.push_front(5);list1.push_front(7);cout << "list1.push_front(5) and list1.push_front(7):" << endl;put_list(list1, "list1");//在 list1 序列中间插入数据list1.insert(++list1.begin(), 3, 9);cout << "list1.insert(list1.begin()+1,3,9):" << endl;put_list(list1, "list1");//测试引用类函数cout << "list1.front()=" << list1.front() << endl;cout << "list1.back()=" << list1.back() << endl;//从 list1 序列的前后各移去一个元素list1.pop_front();list1.pop_back();cout << "list1.pop_front() and list1.pop_back():" << endl;put_list(list1, "list1");//清除 list1 中的第 2 个元素list1.erase(++list1.begin());cout << "list1.erase(++list1.begin()):" << endl;put_list(list1, "list1");//对 list2 赋值并显示list2.assign(8, 1);cout << "list2.assign(8,1):" << endl;put_list(list2, "list2");//显示序列的状态信息cout << "list1.max_size(): " << list1.max_size() << endl;cout << "list1.size(): " << list1.size() << endl;cout << "list1.empty(): " << list1.empty() << endl;//list 序列容器的运算put_list(list1, "list1");put_list(list3, "list3");cout << "list1>list3: " << (list1 > list3) << endl;cout << "list1<list3: " << (list1 < list3) << endl;//对 list1 容器排序list1.sort();put_list(list1, "list1");//结合处理list1.splice(++list1.begin(), list3);put_list(list1, "list1");put_list(list3, "list3");}*////**// *// * //========================= set 容器数据===================================// * *//*//创建 set 模板的实例typedef set<int> SET_INT;//put_HTset 函数,从头向尾显示 set 容器的所有元素void put_HTset(SET_INT set1, char *name) {SET_INT::iterator it;cout << name << ": ";cout << "Head to Tail=";for (it = set1.begin(); it != set1.end(); ++it)cout << (*it) << " ";cout << endl;}//put_THset 函数,从尾向头显示 set 容器的所有元素void put_THset(SET_INT s1, char *name) {SET_INT::reverse_iterator i;cout << name << ": ";cout << "Tail to Head=";for (i = s1.rbegin(); i != s1.rend(); i++)cout << (*i) << " ";cout << endl;}//测试 set 模板void main(void) {int i;//声明 set 的对象和迭代器SET_INT s1;       //容器初始尾空SET_INT::iterator it;//向 s1 对象中插入值for (i = 1; i < 20; i = i + 2) {s1.insert(i);}//正向显示 s1 中的数据put_HTset(s1, "s1");//反向显示 s1 中的数据put_THset(s1, "s1");//构造含有元素的序列并显示SET_INT s2(s1);put_HTset(s2, "s2");//删除 s2 的第 2 个元素并显示s2.erase(++s2.begin());put_HTset(s2, "s2");//向 s2 插入 8 和 9 并显示s2.insert(8);s2.insert(9);put_HTset(s2, "s2");//清空 s2 的序列s2.clear();put_HTset(s2, "s2");//按关键给定的区间显示序列中的元素cout << "[s1.lower_bound(5),s1.upper_bound(15)] :";for (it = s1.lower_bound(4); it != s1.upper_bound(16); it++)cout << (*it) << " ";cout << endl;//显示 s1 的状态信息cout << "s1.size():" << s1.size() << endl;cout << "s1.max_size():" << s1.max_size() << endl;cout << "s1.count(15):" << s1.count(15) << endl;//交换两个 set 容器的元素并显示s1.swap(s2);put_HTset(s1, "s1");put_HTset(s2, "s2");//关系运算s1.insert(5);cout << "s1>s2 = " << (s1 > s2) << endl;}*////**// *// * //========================= multiset 容器数据===================================// * *//*//创建 multiset 模板的实例typedef multiset<int> MULTISET_INT;//put_HTset 函数,从头向尾显示 multiset 容器的所有元素void put_HTset(MULTISET_INT set1, char *name) {MULTISET_INT::iterator it;cout << name << ": ";cout << "Head to Tail=";for (it = set1.begin(); it != set1.end(); ++it)cout << (*it) << " ";cout << endl;}//put_THset 函数,从尾向头显示 multiset 容器的所有元素void put_THset(MULTISET_INT s1, char *name) {MULTISET_INT::reverse_iterator i;cout << name << ": ";cout << "Tail to Head=";for (i = s1.rbegin(); i != s1.rend(); i++)cout << (*i) << " ";cout << endl;}//测试 multiset 模板void main(void) {int i;//声明 multiset 的对象和迭代器MULTISET_INT s1;       //容器初始尾空MULTISET_INT::iterator it;//向 s1 对象中插入值for (i = 1; i < 20; i = i + 2) {s1.insert(i);}//正向显示 s1 中的数据put_HTset(s1, "s1");//反向显示 s1 中的数据put_THset(s1, "s1");//构造含有元素的序列并显示MULTISET_INT s2(s1);put_HTset(s2, "s2");//删除 s2 的第 2 个元素并显示s2.erase(++s2.begin());put_HTset(s2, "s2");//向 s2 插入 8 和 9 并显示s2.insert(8);s2.insert(9);put_HTset(s2, "s2");//清空 s2 的序列s2.clear();put_HTset(s2, "s2");//按键给定的区间显示序列中的元素cout << "[s1.lower_bound(5),s1.upper_bound(15)] :";for (it = s1.lower_bound(4); it != s1.upper_bound(16); it++)cout << (*it) << " ";cout << endl;//显示 s1 的状态信息cout << "s1.size():" << s1.size() << endl;cout << "s1.max_size():" << s1.max_size() << endl;cout << "s1.count(15):" << s1.count(15) << endl;//交换两个 multiset 容器的元素并显示s1.swap(s2);put_HTset(s1, "s1");put_HTset(s2, "s2");//关系运算s1.insert(2);put_HTset(s1, "s1");put_HTset(s2, "s2");cout << "s1>s2 = " << (s1 > s2) << endl;}*////**// *// * //========================= map 容器数据===================================// * *//*//创建 map 的实例,整数(int)映射字符串(string)typedef map<int, string> INT2STRING;//测试 map 容器void main() {//创建 map 对象 theMapINT2STRING theMap;INT2STRING::iterator theIterator, it;//向 theMap 容器中添入数据,数字和字符串配对//每个元素是一个映射对theMap.insert(INT2STRING::value_type(0, "Zero"));theMap.insert(INT2STRING::value_type(2, "Two"));theMap.insert(INT2STRING::value_type(4, "Four"));theMap.insert(INT2STRING::value_type(6, "Six"));theMap.insert(INT2STRING::value_type(8, "Eight"));//显示 map 容器的所有对象cout << "theMap.begin()--theMap.end():" << endl;for (theIterator = theMap.begin(); theIterator != theMap.end();++theIterator) {cout << (*theIterator).first;cout << "," << (*theIterator).second << " ";}cout << endl;//测试 map 容器 key 的惟一性theMap.insert(INT2STRING::value_type(0, "Zero"));theMap.insert(INT2STRING::value_type(1, "One"));theMap.insert(INT2STRING::value_type(2, "Two"));theMap.insert(INT2STRING::value_type(3, "Three"));theMap.insert(INT2STRING::value_type(4, "Four"));theMap.insert(INT2STRING::value_type(5, "Five"));theMap.insert(INT2STRING::value_type(6, "Six"));theMap.insert(INT2STRING::value_type(7, "Seven"));theMap.insert(INT2STRING::value_type(8, "Eight"));theMap.insert(INT2STRING::value_type(9, "Nine"));//下列语句将不能插入到 map 容器中theMap.insert(INT2STRING::value_type(5, "AAA"));//显示 map 容器的所有对象cout << "theMap.begin()--theMap.end():" << endl;for (theIterator = theMap.begin(); theIterator != theMap.end();++theIterator) {cout << (*theIterator).first;cout << "," << (*theIterator).second << " ";}cout << endl;//按键给定的区间显示序列中的元素cout << "[theMap.lower_bound(3),theMap.upper_bound(8)]  :" << endl;for (it = theMap.lower_bound(3); it != theMap.upper_bound(8); it++) {cout << (*it).first;cout << "," << (*it).second << " ";}cout << endl;//显示 theMap 的状态信息cout << "theMap.size():" << theMap.size() << endl;cout << "theMap.max_size():" << theMap.max_size() << endl;cout << "theMap.count(15):" << theMap.count(15) << endl;//  从键盘上输入数字,显示对应的字符串string theString = "";int index;for (;;) {cout << "Enter \"q\" to quit, or enter a Number: ";cin >> theString;if (theString == "q")break;for (index = 0; index < theString.length(); index++) {theIterator = theMap.find(theString[index] - '0');if (theIterator != theMap.end())cout << (*theIterator).second << " ";elsecout << "[err] ";}cout << endl;}}*////**// *// * //========================= multimap 容器数据===================================// * *//*//创建 multimap 的实例,整数(int)映射字符串(string)typedef multimap<int, string> INT2STRING;//测试 multimap 容器void main() {//创建 multimap 对象 theMapINT2STRING theMap;INT2STRING::iterator theIterator, it;//向 theMap 容器中添入数据,数字和字符串配对//每个元素是一个映射对theMap.insert(INT2STRING::value_type(90, "张卫"));theMap.insert(INT2STRING::value_type(85, "李华"));theMap.insert(INT2STRING::value_type(73, "赵明"));theMap.insert(INT2STRING::value_type(96, "郝名"));//显示 multimap 容器的所有对象cout << "theMap.begin()--theMap.end():" << endl;for (theIterator = theMap.begin(); theIterator != theMap.end();++theIterator) {cout << (*theIterator).second;cout << "\t" << (*theIterator).first << endl;}//测试 multimap 容器 key 的非惟一性theMap.insert(INT2STRING::value_type(90, "李朋"));theMap.insert(INT2STRING::value_type(85, "钱德"));theMap.insert(INT2STRING::value_type(93, "赵刚"));//按成绩高低输出 multimap 容器的所有对象INT2STRING::reverse_iterator i;cout << "theMap.rbegin()--theMap.rend():" << endl;for (i = theMap.rbegin(); i != theMap.rend(); ++i) {cout << (*i).second;cout << "\t" << (*i).first << endl;}//按关键给定的区间显示序列中的元素cout << "[theMap.lower_bound(80),theMap.upper_bound(90)]:" << endl;for (it = theMap.lower_bound(80); it != theMap.upper_bound(90); it++) {cout << (*it).second;cout << "\t" << (*it).first << endl;}//显示 theMap 的状态信息cout << "theMap.size():" << theMap.size() << endl;cout << "theMap.max_size():" << theMap.max_size() << endl;cout << "theMap.count(90):" << theMap.count(90) << endl;//清除 90 分以下的数据,并显示结果theMap.erase(theMap.lower_bound(60), theMap.upper_bound(89));cout << "theMap.rbegin()--theMap.rend():" << endl;for (i = theMap.rbegin(); i != theMap.rend(); ++i) {cout << (*i).second;cout << "\t" << (*i).first << endl;}}*////**// *// * //=========================valarray 容器数据===================================// * *//*#define ARRAY_SIZE   3                //array size//测试 valarray 容器void main() {//创建具有 3 个元素的数组 val_arrayvalarray<double> val_array(ARRAY_SIZE);//设置数组的值为 1, 4, 9for (int i = 0; i < ARRAY_SIZE; i++)val_array[i] = (i + 1) * (i + 1);//显示 val_array 数组的大小cout << "Size of val_array = " << val_array.size() << endl;//  显示 val_array 数组的值cout << "The  values  in  val_array  before  calling  sqrt()  and pow():"<< endl;for (int i = 0; i < ARRAY_SIZE; i++)cout << val_array[i] << "     ";cout << endl;//声明一个 rev_valarray 数组,其保存对数组 val_array 的取反valarray<double> rev_valarray(ARRAY_SIZE);for (int i = 0; i < ARRAY_SIZE; i++)rev_valarray[i] = val_array[ARRAY_SIZE - i - 1];//显示 rev_valarray 数组的大小和元素cout << "Size  of  rev_valarray  =  " << rev_valarray.size() << endl;cout << "The values in rev_valarray:" << endl;for (int i = 0; i < ARRAY_SIZE; i++)cout << rev_valarray[i] << "     ";cout << endl;//  声明 rvalue_array 数组,其存放调用 sqrt()和 pow()函数的返回值valarray<double> rvalue_array;//调用 sqrt()函数并显示结果rvalue_array = sqrt(val_array);cout << "The  result  of  rvalue_array  after  calling  sqrt():" << endl;for (int i = 0; i < ARRAY_SIZE; i++)cout << rvalue_array[i] << "      ";cout << endl;//对 val_array 数组元素计算幂函数并显示rvalue_array = pow(val_array, rev_valarray);cout << "The  result  after  calling  pow(val_array, rev_valarray):"<< endl;for (int i = 0; i < ARRAY_SIZE; i++)cout << rvalue_array[i] << "      ";cout << endl;//对 val_array 数组元素计算幂函数,指数均为 2.0,并显示rvalue_array = pow(val_array, 2.0);cout << "The  result  after  calling  pow(val_array,  2.0):" << endl;for (int i = 0; i < ARRAY_SIZE; i++)cout << rvalue_array[i] << "      ";cout << endl;//对 2.0 进行幂函数运算,指数均为数组 val_array 的各元素值rvalue_array = pow(2.0, val_array);cout << "The  result  after  calling  pow(2.0,  val_array):" << endl;for (int i = 0; i < ARRAY_SIZE; i++)cout << rvalue_array[i] << "      ";cout << endl;//对 val_array 和 rvalue_array 求和cout << "val_array.sum()=" << val_array.sum() << endl;cout << "rvalue_array.sum()=" << rvalue_array.sum() << endl;//求最大值并显示cout << "val_array.max()=" << val_array.max() << endl;cout << "rvalue_array.max()=" << rvalue_array.max() << endl;}*////**// *// * //=========================STACK添加数据===================================// * *//*typedef stack<int> STACK_INT;void main() {STACK_INT stack1;int i;//判断栈是否空cout << "stack1.empty() returned " << (stack1.empty() ? "true" : "false")<< endl;//0,2,4,6...入栈for (i = 0; i < 10; i = i + 2)stack1.push(i);//top()函数if (!stack1.empty())cout << "stack1.top() returned " << stack1.top() << endl;//计算栈的长度cout << "stack1.size(): " << stack1.size() << endl;//改变栈顶的值  20.if (!stack1.empty()) {cout << "stack1.top()=20;" << endl;stack1.top() = 20;}//弹出栈中所有的数据并显示cout << "stack1: ";while (!stack1.empty()) {cout << stack1.top() << " ";stack1.pop();}cout << endl;}*////**// *// * //=========================list添加数据===================================// * *//*//创建一个 list 容器的实例 LISTINT,其存放 int 型数据typedef list<int> LISTINT;void main(void) {//用 LISTINT 创建一个名为 listOne 的 list 对象LISTINT listOne;//指定 i 为迭代器变量LISTINT::iterator i;LISTINT::reverse_iterator ir;//从前面向 listOne 容器中添加数据listOne.push_front(2);listOne.push_front(1);//从后面向 listOne 容器中添加数据listOne.push_back(3);listOne.push_back(4);//从前向后显示 listOne 中的数据for (i = listOne.begin(); i != listOne.end(); ++i)cout << *i << " ";cout << endl;//从后向后显示 listOne 中的数据for (ir = listOne.rbegin(); ir != listOne.rend(); ++ir)cout << *ir << " ";cout << endl;//从键盘上输入数据for (i = listOne.begin(); i != listOne.end(); ++i) {cout << "listOne   :";cin >> (*i);}//从前向后显示 listOne 中的数据for (i = listOne.begin(); i != listOne.end(); ++i)cout << *i << " ";cout << endl;//bidirectional 迭代器不允许加减运算// i=listOne.begin()+1;}*////**// *// * //========================= accumulate 算法对普通数组及vector的处理===================// * *//*//利用类模板生成类实例typedef vector<int> IntArray;typedef list<int> LISTINT;typedef set<int> SET_INT;int add(int a, int b) {return a + b;}//在 main()函数中测试 accumulate 算法void main() {//--------------------------------------------//  accumulate 算法对于普通数组的计算//---------------------------------------------int x[] = { 1, 3, 5, 7, 9 };cout << "x[]:";for (int i = 0; i < 5; i++)cout << x[i] << " ";cout << endl;cout << "accumulate(x,x+5,0)=";cout << accumulate(x, x + 5, 0) << endl;int val = 100;cout << "val=" << val << endl;cout << "accumulate(x,x+5,val)=";cout << accumulate(x, x + 5, val) << endl;//--------------------------------------------//  accumulate 算法对于 vector 容器的计算//---------------------------------------------//声明 intvector 容器和迭代器 iiIntArray intvector;IntArray::iterator ii;//向 intvector 容器中插入元素for (int i = 1; i <= 5; i++) {intvector.push_back(i);};//显示 intvector 容器中的元素值和累加结果cout << "intvector: " << endl;for (ii = intvector.begin(); ii != intvector.end(); ++ii)cout << (*ii) << " ";cout << endl;cout << "accumulate(intvector.begin(),intvector.end(),0)=";cout << accumulate(intvector.begin(), intvector.end(), 0) << endl;//--------------------------------------------//  accumulate 算法对于 list 容器的计算//---------------------------------------------//声明 list 容器对象和迭代器LISTINT::iterator iL;LISTINT list1;//向 list1 容器对象中插入元素并显示list1.push_front(1);list1.push_front(3);list1.push_front(5);list1.push_back(2);list1.push_back(6);//显示 list1 容器的元素值和累加结果cout << "list1: " << endl;for (iL = list1.begin(); iL != list1.end(); ++iL)cout << (*iL) << " ";cout << endl;cout << "accumulate(list1.begin(),list1.end(),0)=";cout << accumulate(list1.begin(), list1.end(), 0) << endl;//--------------------------------------------//  accumulate 算法对于 set 容器的计算//---------------------------------------------//声明 set 容器对象和迭代器SET_INT set1;SET_INT::iterator si;//向 set1 容器中插入元素set1.insert(5);set1.insert(20);set1.insert(10);set1.insert(15);set1.insert(25);//显示 set1 容器的元素值和累加结果cout << "set1: " << endl;for (si = set1.begin(); si != set1.end(); ++si)cout << (*si) << " ";cout << endl;cout << "accumulate(set1.begin(),set1.end(),0)=";cout << accumulate(set1.begin(), set1.end(), 0) << endl;cout << "accumulate(set1.begin(),set1.end(),100)=";cout << accumulate(set1.begin(), set1.end(), 100) << endl;}*//** * * //========================= count 算法对普通数组及vector的处理======================== * *//*#define size 10//产生指定范围的整数随机数int getrand(int min, int max) {int m;m = (max - min);m = min + double(rand()) / RAND_MAX * m;return m;}//利用类模板生成实例typedef vector<int> IntArray;typedef list<int> LISTINT;typedef set<int> SET_INT;//在 main()函数中测试 accumulate 算法void main() {//--------------------------------------------//  count 算法对于普通数组的计算//---------------------------------------------int x[size];cout << "x[]:";for (int i = 0; i < size; i++) {x[i] = getrand(1, 3);cout << x[i] << " ";}cout << endl;cout << "count(x,x+size,2)=";cout << count(x, x + size, 2) << endl;cout << "count(x+2,x+8,2)=";cout << count(x + 2, x + 8, 2) << endl;//--------------------------------------------//  count 算法对于 vector 容器的计算//---------------------------------------------//声明 intvector 容器和迭代器 iiIntArray intvector;IntArray::iterator ii;//向 intvector 容器中插入元素for (int i = 1; i < size; i++) {intvector.push_back(getrand(2, 6));};//显示 intvector 容器中的元素值和统计结果cout << "intvector: ";for (ii = intvector.begin(); ii != intvector.end(); ++ii)cout << (*ii) << " ";cout << endl;cout << "count(intvector.begin(),intvector.end(),4)=";cout << count(intvector.begin(), intvector.end(), 4) << endl;//--------------------------------------------//  count 算法对于 list 容器的计算//---------------------------------------------//声明 list 容器对象和迭代器LISTINT::iterator iL;LISTINT list1;//向 list1 容器对象中插入元素并显示for (int i = 1; i < size; i++) {list1.push_front(getrand(3, 5));};//显示 list1 容器的元素值和统计结果cout << "list1: ";for (iL = list1.begin(); iL != list1.end(); ++iL)cout << (*iL) << " ";cout << endl;cout << "count(list1.begin(),list1.end(),3)=";cout << count(list1.begin(), list1.end(), 3) << endl;//--------------------------------------------//  count 算法对于 set 容器的计算//---------------------------------------------//声明 set 容器对象和迭代器SET_INT set1;SET_INT::iterator si;//向 set1 容器中插入元素for (int i = 1; i < size; i++) {set1.insert(getrand(1, 10));};//显示 set1 容器的元素值和统计结果cout << "set1: ";for (si = set1.begin(); si != set1.end(); ++si)cout << (*si) << " ";cout << endl;cout << "count(set1.begin(),set1.end(),5)=";cout << count(set1.begin(), set1.end(), 5) << endl;}*////**// *// * //========================= count_if 算法对普通数组及vector的处理======================// * *//*//如果字符串以'S'开头,则返回 trueint MatchFirstChar(const string& str) {string s("S");return s == str.substr(0, 1);}//测试 count_if 算法int main() {const int VECTOR_SIZE = 8;//生成成员类型为 strings 的 vector 容器类typedef vector<string> StringVector;//定义迭代器类型typedef StringVector::iterator StringVectorIt;//声明 vector 容器的对象StringVector NamesVect(VECTOR_SIZE);//声明迭代器StringVectorIt start, end, it;int result = 0;    //  存放统计数据//初始化 vector 容器 NamesVectNamesVect[0] = "She";NamesVect[1] = "Sells";NamesVect[2] = "Sea";NamesVect[3] = "Shells";NamesVect[4] = "by";NamesVect[5] = "the";NamesVect[6] = "Sea";NamesVect[7] = "Shore";//设置容器的起始位置和终止位置start = NamesVect.begin();end = NamesVect.end();//显示 NamesVect 容器的元素cout << "NamesVect: ";for (it = start; it != end; it++)cout << *it << " ";cout << endl;//统计并显示 NamesVect 容器的所有元素中以'S'字符开头的字符串result = count_if(start, end, MatchFirstChar);cout << "Number of elements that start with letter \"S\" = " << result<< endl;//显示 NamesVect 容器[1,6]之间的元素cout << "NamesVect[1]--NamesVect[6]: ";for (it = &NamesVect[1]; it != &NamesVect[7]; it++)cout << *it << " ";cout << endl;//统计并显示 NamesVect 容器的所有元素中以'S'字符开头的字符串result = count_if(&NamesVect[1], &NamesVect[7], MatchFirstChar);cout << "Number of elements that start with letter \"S\" = " << result<< endl;return 1;}*////**// *// * //========================= fill 和 fill_n算法对普通数组及vector的处理====================// * *//*//利用类模板生成实例typedef vector<int> IntArray;//显示数组void put_array(int x[], int size) {for (int i = 0; i < size; i++)cout << x[i] << " ";cout << endl;}//显示 vector 容器中的元素void put_vector(IntArray v) {IntArray::iterator theIterator;for (theIterator = v.begin(); theIterator != v.end(); ++theIterator) {cout << (*theIterator) << " ";}cout << endl;}//在 main()函数中测试 fill 和 fill_n 算法int main() {//--------------------------------------------//  fill 和 fill_n 算法对普通数组的计算//---------------------------------------------int x[] = { 1, 3, 5, 7, 9 };cout << "x[]: ";put_array(x, 5);//填数处理fill(x + 1, x + 3, 2);cout << "fill(x+1,x+3,2): " << endl;put_array(x, 5);fill_n(x, 3, 8);cout << "fill_n(x,3,8): " << endl;put_array(x, 5);//--------------------------------------------//  fill 和 fill_n 算法对于 vector 容器的计算//---------------------------------------------//声明 intvector 容器和迭代器 iiIntArray intvector;//向 intvector 容器中插入元素for (int i = 1; i <= 10; i++) {intvector.push_back(i);};//显示 intvector 容器中的元素值和统计结果cout << "intvector: " << endl;put_vector(intvector);//填数处理fill(intvector.begin(), intvector.begin() + 3, 2);cout << "fill(intvector.begin(),intvector.begin()+3,2): " << endl;put_vector(intvector);fill_n(&intvector[5], 3, 8);cout << "fill_n(&intvector[5],3,8): " << endl;put_vector(intvector);return 0;}*//** * * //========================= find()算法对普通数组及vector的处理================= * *//*#define ARRAY_SIZE 10//利用类模板生成实例typedef vector<int> IntArray;//显示数组void put_array(int x[], int size) {for (int i = 0; i < size; i++)cout << x[i] << " ";cout << endl;}//显示 vector 容器中的元素void put_vector(IntArray v) {IntArray::iterator theIterator;for (theIterator = v.begin(); theIterator != v.end(); ++theIterator) {cout << (*theIterator) << " ";}cout << endl;}//在 main()函数中测试 find()算法int main() {int i, value, *p;//--------------------------------------------//  find()算法对于普通数组的处理//---------------------------------------------int x[ARRAY_SIZE] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };cout << "x[]: ";put_array(x, ARRAY_SIZE);//find()算法查找,并显示查找结果for (i = 0; i <= 2; i++) {cout << "value=";cin >> value;p = find(x, x + ARRAY_SIZE, value);if (p != x + ARRAY_SIZE) {   //查到cout << "First element that matches " << value;cout << " is at location " << p - x << endl;} else {            //未查到cout << "The sequence does not contain any elements";cout << " with value " << value << endl;}}//--------------------------------------------//  find()算法对于 vector 容器的处理//---------------------------------------------//声明 intvector 容器对象IntArray intvector;//向 intvector 容器中插入元素for (i = 1; i <= 10; i++) {intvector.push_back(i);};//显示 intvector 容器中的元素值cout << "intvector: ";put_vector(intvector);//find()算法查找,并显示查找结果IntArray::iterator pos;for (i = 0; i <= 2; i++) {cout << "value=";cin >> value;pos = find(intvector.begin(), intvector.end(), value);if (pos != intvector.end()) {   //查到cout << "First element that matches " << value;cout << " is at location " << pos - intvector.begin() << endl;} else {            //未查到cout << "The  sequence  does  not  contain  any elements";cout << " with value " << value << endl;}}return 1;}*//** * * //========================= find_end()算法对普通数组的处理==================== * *//*#define ARRAY_SIZE 10//利用类模板生成实例typedef vector<int> IntArray;//显示数组void put_array(int x[], int size) {for (int i = 0; i < size; i++)cout << x[i] << " ";}//显示 vector 容器中的元素void put_vector(IntArray v) {IntArray::iterator theIterator;for (theIterator = v.begin(); theIterator != v.end(); ++theIterator) {cout << (*theIterator) << " ";}}//在 main()函数中测试 find()_end()算法int main() {//--------------------------------------------//  find_end()算法对普通数组的处理//---------------------------------------------int x[ARRAY_SIZE] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };cout << "x[]: ";put_array(x, ARRAY_SIZE);cout << endl;int y[] = { 5, 7, 9 };cout << "y[]: ";put_array(y, 3);cout << endl;// find_end()算法查找,并显示查找结果int *p = find_end(x, x + ARRAY_SIZE, &y[0], &y[2]);if (p != x + ARRAY_SIZE) {   //查到cout << "The first element that matches :";put_array(y, 3);cout << " is at location in x" << p - x << endl;} else {            //未查到cout << "The sequence does not contain any elements";cout << " with value ";put_array(&x[3], 3);}//--------------------------------------------//  find_end()算法对 vector 容器的处理//---------------------------------------------//声明 intvector 容器对象IntArray intvector;//向 intvector 容器中插入元素for (int i = 1; i <= 10; i++) {intvector.push_back(i);};//显示 intvector 容器中的元素值cout << "intvector: ";put_vector(intvector);cout << endl;IntArray temp;temp.push_back(5);temp.push_back(6);temp.push_back(7);cout << "temp: ";put_vector(temp);cout << endl;// find_end()算法查找,并显示查找结果IntArray::iterator pos;pos = find_end(intvector.begin(), intvector.end(), temp.begin(),temp.end());if (pos != intvector.end()) {   //查到cout << "The first element that matches ";put_vector(temp);cout << "  is  at  location  in  intvector  " << pos - intvector.begin()<< endl;} else {            //未查到cout << "The sequence does not contain any elements";cout << " with value ";put_vector(temp);cout << endl;}return 1;}*//** * * //===============利用 generate_n 算法用 Fibonacci  数填充 vector 容器================== * *//*//返回一个 Fibonacci 数,其由 generate_n()算法调用int Fibonacci1(void) {static int r;static int f1 = 0;static int f2 = 1;r = f1 + f2;f1 = f2;f2 = r;return f1;}//返回一个 Fibonacci 数,其由 generate()算法调用int Fibonacci2(void) {static int r;static int f1 = 0;static int f2 = 1;r = f1 + f2;f1 = f2;f2 = r;return f1;}//定义整型数的 vector 容器类typedef vector<int> IntVector;//显示 vector 容器中的元素void put_vector(IntVector v, char *name) {IntVector::iterator theIterator;cout << name << ":" << endl;for (theIterator = v.begin(); theIterator != v.end(); ++theIterator) {cout << (*theIterator) << " ";}cout << endl;}//测试 generate()和 generate_n()算法int main() {const int VECTOR_SIZE = 15;//定义迭代器类typedef IntVector::iterator IntVectorIt;//声明 vector 容器对象IntVector Numbers1(VECTOR_SIZE), Numbers2(VECTOR_SIZE);int i;//初始化 vector 容器对象for (i = 0; i < VECTOR_SIZE; i++)Numbers1[i] = i;//显示 vector 容器对象的元素cout << "Before calling generate_n:" << endl;put_vector(Numbers1, "Numbers1");//利用 generate_n 算法用 Fibonacci  数填充 vector 容器generate_n(Numbers1.begin(), VECTOR_SIZE, Fibonacci1);//显示 vector 容器对象的元素cout << "After calling generate_n:" << endl;put_vector(Numbers1, "Numbers1");//利用 generate 算法用 Fibonacci  数填充 vector 容器generate(Numbers2.begin(), Numbers2.end(), Fibonacci2);//显示 vector 容器对象的元素cout << "After calling generate:" << endl;put_vector(Numbers2, "Numbers2");return 1;}*//** * * //================reverse()和 reverse_copy()算法对 vector 容器的处理====================== * *//*//利用类模板生成实例typedef vector<int> IntArray;//显示数组void put_array(int x[], int size) {for (int i = 0; i < size; i++)cout << x[i] << " ";cout << endl;}//显示 vector 容器中的元素void put_vector(IntArray v) {IntArray::iterator theIterator;for (theIterator = v.begin(); theIterator != v.end(); ++theIterator) {cout << (*theIterator) << " ";}cout << endl;}//在 main()函数中测试 reverse()和 reverse_copy()算法int main() {//--------------------------------------------//  reverse()和 reverse_copy()算法对普通数组处理//---------------------------------------------int x[] = { 1, 3, 5, 7, 9 };cout << "x[]:";put_array(x, 5);//reverse()反转 x 数组并显示reverse(x, x + 5);cout << "x[]:";put_array(x, 5);int y[] = { 2, 4, 6, 8, 10 };cout << "y[]:";put_array(y, 5);//reverse_copy()反转 y 数组的部分元素并拷贝到 x 数组第 2个元素位置reverse_copy(y + 1, y + 3, x + 1);cout << "x[]:";put_array(x, 5);cout << "y[]:";put_array(y, 5);//--------------------------------------------//  reverse()和 reverse_copy()算法对 vector 容器的处理//---------------------------------------------//声明 intvector 容器和迭代器 iiIntArray intvector;//向 intvector 容器中插入元素for (int i = 1; i <= 10; i++) {intvector.push_back(i);};//显示 intvector 容器中的元素值cout << "intvector: " << endl;put_vector(intvector);//reverse()对于 vector 容器的处理reverse(intvector.begin(), intvector.end());cout << "intvector: " << endl;put_vector(intvector);// reverse_copy 对于 vector 容器的处理IntArray temp(5);reverse_copy(intvector.begin() + 2, intvector.begin() + 7, temp.begin());cout << "temp: " << endl;put_vector(temp);return 1;}*//** * * //=================sort()和 partial_sort()算法对普通数组处理===================== * * *//*#define ARRAY_SIZE 15//定义整型数的 vector 容器类typedef vector<int> IntVector;//显示数组void put_array(int x[], int size) {for (int i = 0; i < size; i++)cout << x[i] << " ";cout << endl;}//显示 vector 容器中的元素void put_vector(IntVector v, char *name) {IntVector::iterator theIterator;cout << name << ": ";for (theIterator = v.begin(); theIterator != v.end(); ++theIterator) {cout << (*theIterator) << " ";}cout << endl;}//产生指定范围的整数随机数int getrand(int min, int max) {int m;m = (max - min);m = int(min + double(rand()) / RAND_MAX * m);return m;}//在 main()函数中测试 sort()和 partial_sort()算法int main() {int i;//--------------------------------------------  sort()和 partial_sort()算法对普通数组处理//---------------------------------------------sort()算法处理数组,并显示int x[ARRAY_SIZE];for (i = 0; i < ARRAY_SIZE; i++) {x[i] = getrand(1, 20);}cout << "x[]:";put_array(x, ARRAY_SIZE);sort(x, x + ARRAY_SIZE);cout << "sort(x,x+ARRAY_SIZE):" << endl;put_array(x, ARRAY_SIZE);//partial_sort()算法对于数组进行处理int y[ARRAY_SIZE];for (i = 0; i < ARRAY_SIZE; i++) {y[i] = getrand(1, 30);}cout << "y[]:";put_array(y, ARRAY_SIZE);partial_sort(y + 2, y + 7, y + ARRAY_SIZE);cout << "partial_sort(y+2,y+7,y+ARRAY_SIZE):" << endl;put_array(y, ARRAY_SIZE);//--------------------------------------------//  sort()和 partial_sort()算法对 vector 容器的处理//---------------------------------------------IntVector Numbers1, Numbers2;for (i = 0; i < 15; i++) {Numbers1.push_back(getrand(1, 30));Numbers2.push_back(getrand(1, 30));}put_vector(Numbers1, "Numbers1");put_vector(Numbers2, "Numbers2");//sort()算法处理并显示sort(Numbers1.begin(), Numbers1.end());cout << "After call sort():" << endl;put_vector(Numbers1, "Numbers1");//partial_sort()算法处理并显示partial_sort(Numbers2.begin() + 2, Numbers2.begin() + 7, Numbers2.end());cout << "After call partial_sort():" << endl;put_vector(Numbers2, "Numbers2");return 1;}*///=================end=end=end=end=end===========================================================

C++模板类的使用:

//============================================================================// Name        : ACCD.cpp// Author      : zhubin// Version     :// Copyright   : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>#include<string.h>using namespace std;/** * * =================C++ 模板类的使用========================== * *//*//声明函数模板的原型语句template <class T> void swap(T *x, T *y);//定义一个结构类型struct student {int n;char name[20];float grade;};//在 main()函数中测试 swap()函数模板void main(void){//交换两个 int 型变量中的数据int m=3,n=5;cout<<"m="<<m<<"   n="<<n<<endl;swap(&m,&n);cout<<"m="<<m<<"   n="<<n<<endl;cout<<"-------------------"<<endl;//交换两个 double 型变量中的数据double x=3.5,y=5.7;cout<<"x="<<x<<"   y="<<y<<endl;swap(&x,&y);cout<<"x="<<x<<"   y="<<y<<endl;cout<<"-------------------"<<endl;//交换两个 char 型变量中的数据char c1='A',c2='a';cout<<"c1="<<c1<<"   c2="<<c2<<endl;swap(&c1,&c2);cout<<"c1="<<c1<<"   c2="<<c2<<endl;cout<<"-------------------"<<endl;//交换两个结构变量中的数据student s1={1001,"ZhangHua",90};student s2={1011,"LiWei",95.5};cout<<"s1:   ";cout<<s1.n<<"   "<<s1.name<<"   "<<s1.grade<<endl;cout<<"s2:   ";cout<<s2.n<<"   "<<s2.name<<"   "<<s2.grade<<endl;swap(&s1,&s2);cout<<"swap(s1,s2):"<<endl;cout<<"s1:   ";cout<<s1.n<<"   "<<s1.name<<"   "<<s1.grade<<endl;cout<<"s2:   ";cout<<s2.n<<"   "<<s2.name<<"   "<<s2.grade<<endl;}*//** * * =================C++ 模板类的使用========================== * *//*//定义名为 swap 的函数模板用于交换两个变量中的数据template <class T> void swap(T *x, T *y){T temp;temp=*x;*x=*y;*y=temp;}//定义输入函数模板template <class T> void input(char *str,T &x) {cout<<str<<"=";cin>>x;}//定义输出函数模板template <class T> void output(char *str,T x) {cout<<str<<"="<<x<<endl;}//在 main()函数中测试输入输出函数模板void main(void){//输入输出 int 型数据int a,b;input("a",a);output("a",a);b=3*a;output("3*a",b);output("a+b",a+b);cout<<"-------------------"<<endl;//输入输出 double 型数据double x,y;input("x",x);output("x",x);y=2*x;output("y",y);cout<<"-------------------"<<endl;//输入输出 char 型数据char c1;input("c1",c1);output("c1+2",char(c1+2));cout<<"-------------------"<<endl;//输入输出字符串数据char string[80];input("string",string);output("string",string);}*//** * * =================C++ 数组模板类的使用========================== * *//*//显示数组的函数模板template<class T> void arr_put(T arr[], int size) {for (int i = 0; i < size; i++)cout << arr[i] << " ";cout << endl;}//选择法对数组排序的函数模板template<class T> void sort(T arr[], int size) {T temp;int i, j;for (i = 0; i < size - 1; i++)for (j = i + 1; j < size; j++)if (arr[i] > arr[j]) {temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}//二分查找法的函数模板template<class T> int binary_search(T array[], T value, int size) {int found = 0;int high = size, low = 0, mid;mid = (high + low) / 2;cout << "Looking for " << value << endl;while ((!found) && (high >= low)) {if (value == array[mid])found = 1;else if (value < array[mid])high = mid - 1;elselow = mid + 1;mid = (high + low) / 2;}return ((found) ? mid : -1);}//main()函数中使用处理数组的函数模板void main(void) {//处理 int 型数组int array[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 10 };//显示数组初值arr_put(array, 10);//对数组排序并显示sort(array, 10);arr_put(array, 10);//查找数组cout << "Result  of  search:  " << binary_search(array, 3, 10) << endl;cout << "Result  of  search:  " << binary_search(array, 2, 10) << endl;cout << "Result  of  search:  " << binary_search(array, 9, 10) << endl;cout << "Result  of  search:  " << binary_search(array, 5, 10) << endl;cout << "------------------------------" << endl;//处理字符串型数组char ch1, str[] = "happy";int size = strlen(str);//显示数组初值arr_put(str, size);//对数组排序并显示sort(str, size);arr_put(str, size);//查找数组cout << "Input a char:";cin >> ch1;cout << "Result  of  search:  " << binary_search(str, ch1, size) << endl;}*//** * * =================C++ 模板类的使用========================== * *//*//定义名为 ex_class 的类模板 template<class T> class ex_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 类模板 void main(void) { //测试 int 类型数据 ex_class<int> a(5), b(10); cout << "a.value:" << a.get_value() << endl; cout << "b.value:" << b.get_value() << endl; //测试 char 类型数据 ex_class<char> ch('A'); cout << "ch.value:" << ch.get_value() << endl; ch.set_value('a'); cout << "ch.value:" << ch.get_value() << endl; //测试 double 类型数据 ex_class<double> x(5.5); cout << "x.value:" << x.get_value() << endl; x.set_value(7.5); cout << "x.value:" << x.get_value() << endl; }*//** * * =================C++ stck模板类的使用========================== * *//*//定义栈的尺寸 const int SIZE = 100; //定义处理栈的类模板接口 template<class T> class stack { T stck[SIZE]; int tos; public: stack(void) { tos = 0; cout << "Stack Initialized." << endl; } ~stack(void) { cout << "Stack Destroyed." << endl; } void push(T); T pop(void); }; //定义栈的成员函数 template<class T> void stack<T>::push(T i) { if (tos == SIZE) { cout << "Stack is full." << endl; return; } stck[tos++] = i; } template<class T> T stack<T>::pop(void) { if (tos == 0) { cout << "Stack underflow." << endl; return 0; } return stck[--tos]; } //main()函数中测试 stack 类模板 void main(void) { //处理 int 类型数据的栈 cout << "stack<int> a :" << endl; stack<int> a; a.push(1); a.push(2); cout << a.pop() << " "; cout << a.pop() << endl; //处理 double 类型数据的栈 cout << "stack<double> b :" << endl; stack<double> b; b.push(99.3); b.push(-12.23); cout << b.pop() << " "; cout << b.pop() << endl; //处理 char 类型数据的栈 cout << "stack<char> c :" << endl; stack<char> c; for (int i = 0; i < 10; i++) c.push((char) 'A' + i); for (int i = 0; i < 10; i++) cout << c.pop(); cout << endl; }*//** * * =================C++模板类的使用========================== * *//* //定义名为 ex_class 的类模板 template<class T1, class T2> class ex_class { T1 value1; T2 value2; public: ex_class(T1 v1, T2 v2) { value1 = v1; value2 = v2; } void set_value(T1 v1, T2 v2) { value1 = v1; value2 = v2; } void put_value(void) { cout << "valu1=" << value1 << endl; cout << "valu2=" << value2 << endl; } }; //main()函数中测试 ex_class 类模板 void main(void) { //测试 int 和 double 类型数据 ex_class<int, double> a(5, 1.5); cout << "ex_class <int,double> a:" << endl; a.put_value(); a.set_value(100, 3.14); a.put_value(); //测试 double 和 int 类型数据 ex_class<double, int> b(0.5, 5); cout << "ex_class <double,int> b:" << endl; b.put_value(); b.set_value(1.732, 100); b.put_value(); //测试 char 和 int 类型数据 ex_class<char, int> c('a', 5); cout << "ex_class <char,int> c:" << endl; c.put_value(); c.set_value('B', 100); c.put_value(); //测试 int 和 int 类型数据 ex_class<int, int> d(5, 10); cout << "ex_class <int,int> d:" << endl; d.put_value(); d.set_value(100, 200); d.put_value(); } */




4 0
原创粉丝点击