// STLTest.cpp :在 VS2010 下测试通过
//
#include "stdafx.h"
#include <stdlib.h> // Need random(), srandom()
#include <time.h> // Need time()
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <deque>
#include <list>
#include <vector>
#include <functional> // Need ptr_fun()
#include <map>
#include <stack>
#include <set>
/*
#include Container Class
<deque> deque
<list> list
<map> map, multimap
<queue> queue, priority_queue
<set> set, multiset
<stack> stack
<vector> vector, vector<bool>
*/
using namespace std;
#define SIZE 100
double darray[SIZE] = {1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9};
vector<double> vdouble(10);
int iarray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector<int> v(iarray, iarray + 10);
// Function prototypes
void Display(vector<int>& vr, const char *s);
unsigned int RandInt(const unsigned int n);
void DisplayMap(map<int,std::string> myMap);
int _tmain(int argc, _TCHAR* argv[])
{
cout<<"array"<<endl;
iarray[20] = 50;
int* ip = find(iarray, iarray + SIZE, 50);
if (ip == iarray + SIZE)
cout << "50 not found in array" << endl; else
cout << *ip << " found in array" << endl;
int k=0;
// cin>>k;
cout<<"vector"<<endl;
vector<int> intVector(100);
intVector[20] = 50;
vector<int>::iterator intIter = find(intVector.begin(), intVector.end(), 50);
if (intIter != intVector.end())
cout << "Vector contains value " << *intIter << endl;
else
cout << "Vector does not contain 50" << endl;
//当使用copy()算法的时候,你必须确保目标容器有足够大的空间,或者容器本身是自动扩展的。
// cin>>k;
cout<<"vector copy"<<endl;
vector<double>::iterator outputIterator = vdouble.begin();
copy(darray, darray + 10, outputIterator);
while (outputIterator != vdouble.end())
{
cout << *outputIterator << endl;
outputIterator++;
}
//cin>>k;
cout<<"发生器函数对象 sample"<<endl;
srand(time(NULL) );
//Seed random generator
Display(v, "Before shuffle:");
pointer_to_unary_function<unsigned int, unsigned int> ptr_RandInt = ptr_fun(RandInt); // Pointer to RandInt()//注意这行
random_shuffle(v.begin(), v.end(), ptr_RandInt);
Display(v, "After shuffle:");
//cin>>k;
cout<<"my sample"<<endl;
stack<int> myStack;
myStack.push(1);
myStack.push(2);
cout<<myStack.top()<<endl;
//第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值,用程序说明
map<int,std::string> myMap;
myMap.insert(pair<int,std::string>(1,"jiayp"));
myMap.insert(pair<int,std::string>(2,"cdh"));
map<int, string>::iterator iter;
for(iter = myMap.begin(); iter != myMap.end(); iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
myMap.insert(map<int, string>::value_type (4, "student_one"));
myMap.insert(map<int, string>::value_type (5, "student_two"));
myMap.insert(map<int, string>::value_type (6, "student_three"));
DisplayMap(myMap);
myMap[3]="test";
DisplayMap(myMap);
cout<<"for"<<endl;
for(int i=1;i<=myMap.size();i++)
{
cout<<myMap[i]<<endl;
}
cout<<"find"<<endl;
cout<<myMap.count(13)<<endl;
//map<int, string>::iterator iter;
iter = myMap.find(2);
if(iter != myMap.end())
{
cout<<"Find, the value is "<<iter->second<<endl;
}
else
{
cout<<"Do not Find"<<endl;
}
map<int, string>::iterator iter2=myMap.lower_bound(2);
iter=myMap.begin();
while(iter !=iter2)
{
cout<<"lower_bound (2) is "<<iter->second<<endl;
iter++;
}
iter=myMap.upper_bound(2);
while(iter != myMap.end())
{
cout<<"upper_bound (2) is "<<iter->second<<endl;
iter++;
}
//如果要删除1,用迭代器删除
iter = myMap.find(1);
myMap.erase(iter);
int n = myMap.erase(2);//
DisplayMap(myMap);
// myMap.earse(mapStudent.begin(), myMap.end());
myMap.clear();
cout<<myMap.empty()<<endl;
cin>>k;
cout<<"next sample"<<endl;
//myMap.insert(
return 0;
}
void DisplayMap(map<int,std::string> myMap)
{
map<int, string>::iterator iter;
for(iter = myMap.begin(); iter != myMap.end(); iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
}
// Display contents of vector vr
void Display(vector<int>& vr, const char *s)
{
cout << endl << s << endl;
copy(vr.begin(), vr.end(), ostream_iterator<int>(cout, " "));
cout << endl;
}
// Return next random value in sequence modulo n
unsigned int RandInt(const unsigned int n)
{
return rand() % n;
}