C++中STL的一些代码

 

          这次把C++中的STL的一些东西练习一下下,STL全称为  Standard Template Library ,也就是标准模板库,  要使用STL,要了解以下几个基本概念:

        容器:可以把它理解为存放数据的地方,常用的一些容器有 链表(list) 栈(stack) 动态数组 (vector) 双端队列(deque) 队列(queue) 映射(map)

        游标(iterator):可以把它理解为指针类型,STL中的许多函数需要用到它们作为参数

        算法:它们通常需要与容器和游标配合使用,使用它们,你可以方便地对容器中的数据进行各种常见的操作,如排序操作,寻找最大元素的操作等

       

1 顺序容器
  vector 动态数组,元素在内存连续存放。在尾部增删元素具有较佳的性能(不重新分配存储空间)

  deque  头文件<deque>
  双向队列。在元素内存中连续存放,在两端增删元素具有较佳的性能

  list 头文件<list>
  双向链表,元素在内存不连续存放(不支持随机存储)


2 关联容器
   元素是排序的
   插入和检索的时间都是o(logN)因为排序好了
  
   set/multiset  set中不允许相同的元素存在,而multiset允许存在  里面允许各种类型
  
    map/multimap   map中存放的元素仅有两个成员变量,一个first,second,map根据first的值对元素进行从小到大排序,并快速检索。


3容器适配器
   stack   queue


迭代器用法和指针相似

       

        我只是简单的练习容器, 这个先是list双向链表代码,也只是简单的练习下,害怕自己忘记而已。

#include <iostream>
#include <list>
#include <cstdlib>

using namespace std;
		
int main(int argc, char** argv) {
    int i;
    list<char>lst;
    for(i=0;i<10;i++)
      lst.push_back('A'+(rand()%26));
    cout<<"Original contents: ";
    list<char>::iterator p = lst.begin();
    while( p != lst.end()){
    	cout<<*p;
    	p++;
    }
    cout<<endl;
    //sort the list
    lst.sort();
    cout<<"Sorted contents: ";
    p = lst.begin();
    while( p != lst.end()){
    	cout<<*p;
    	p++;
    }
		return 0;
}


      


map的使用

#include <iostream>
#include <map>
#include <string>

using namespace std;
		
int main(int argc, char** argv) {
      int i;
      map<string,string>m;
      
      m.insert(pair<string,string>("yes","no"));
      m.insert(pair<string,string>("up","down"));
      m.insert(pair<string,string>("left","right"));
      m.insert(pair<string,string>("cool","tong"));
	  string s;
	  cout<<"Enter word: ";
	  cin>>s;
	  
	  map<string,string>::iterator p;
	  
	  p = m.find(s);
	  if(p != m.end())
	     cout<<"Opposite:"<<p->second;
	  else
	  	 cout<<"Word not in map\n";
	
		return 0;
}

 

queue的应用

 

#include <iostream>
#include <queue>
#include <string>

using namespace std;
		
int main(int argc, char** argv) {
     queue<string>str_queue;
     str_queue.push("string1");
     str_queue.push("string2");
     str_queue.push("string3");
     cout<<"the size of the queue is:"<<str_queue.size()<<endl;
     cout<<"the front one :  "<<str_queue.front()<<endl;
     cout<<"the back one :  "<<str_queue.back()<<endl;
     str_queue.pop();
     str_queue.pop();
     str_queue.pop();
     if(str_queue.empty())
        cout<<"the queue is empty"<<endl;
		return 0;
}


vector的使用

#include <iostream>
#include <vector>

using namespace std;
		
int main(int argc, char** argv) {
    vector<char>v;
    int i;
    
    for(i=0;i<10;i++)
       v.push_back('A'+i);
    for(i=0;i<10;i++)
       cout<<v[i]<<" ";
    cout<<endl;
    
    vector<char>::iterator p = v.begin();
	while( p!= v.end()){
		cout<<*p<<" ";
		p++;
	}
		return 0;
}


string的使用

#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
	string a="abcedjnmbvnbm, cnm,bncm,bnm, nm,cnmm,klndslkfl sdnsdklnf ls";
	cout<<a.length()<<endl;
	cout<<a.size()<<endl;
	cout<<a.capacity()<<endl;
	cout<<a.max_size()<<endl;	
	return 0;
}

*************************************************************
#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
	string a="abcdefghi";
	string b="123456789";
	string c="啦啦啦啦"; 
	
	cout<<"比较字符串a和b"<<endl;
	cout<<a.compare(b)<<endl;
    
	a.swap(b);
    cout<<"交换后a和b的输出"<<endl<<"输出a="<<a<<endl<<"输出b="<<b<<endl;
    
    cout<<"查找"<<endl;
    cout<<b.find('e',0)<<endl;
    
    cout<<"熟悉replace"<<endl;
	cout<<b.replace(0,5,a)<<endl;
	
	cout<<"插入insert"<<endl;
    cout<<b.insert(5,c)<<endl;
    
	return 0;
}

*********************************************************************
#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
   string str("this is an example sencetence.");
   cout<<str<<endl;
   
   str.erase(10,8);
   cout<<str<<endl;
   
   str.erase(str.begin()+9);  //删除第9个 
   cout<<str<<endl;
   
    str.erase(str.begin()+5,str.end()-9);
    cout<<str<<endl;
	return 0;
}
定义两个string类型的字符串,然后调用erase(),这个主要还是参数问题。只有一个参数就表示删除第几个位置的字符,begin()和end()只不过是开始和结束的位置,

******************************************************************************************
#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
     string str("there are two needles in this haystack with needles.");
     string str2("needle");
     int found=str.find(str2);
     if(found!=-1)
        cout<<"first 'neeedle'found at:"<<found<<endl;
     
	 found=str.find("needle are small",found+1,6);//从pos开始查找字符串s中前n个字符在当前串中的位置
     if(found!=-1)
        cout<<"second 'needle' found at: "<<found<<endl ;
        
     found=str.find("haystack");
     cout << "'haystack' also found at: " << found <<endl;
     
     found=str.find('.');
     if(found!=-1)
         cout << "Period found at: " << found << endl;
   // 从str在字符串中找到str2的首位置并删除,然后加上后面的字符串 
     str.replace(str.find(str2),str2.length(),"preposition");
     cout<<str<<endl;
	return 0;
}
*****************************************************************************************************
#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
     string base="this is a test string .";
	 
	string str2="n example";
	
	string str3="sample phrase";
	
	string str4="useful.";
	
	string str=base;
	
	cout<<str.replace(9,5,str2)<<endl;
	cout<<str.replace(19,6,str3,7,6)<<endl;
	cout<<str.replace(8,10,"just a")<<endl;
	cout<<str.replace(8,6,"a shorty",7)<<endl;
	cout<<str.replace(22,1,3,'!')<<endl;
	cout<<str<<endl;
	
	return 0;
}




运行结果
this is an example string .
this is an example phrase .
this is just a phrase .
this is a short phrase .
this is a short phrase!!!.
this is a short phrase!!!.

--------------------------------
Process exited with return value 0
Press any key to continue . . .


*********************************************************************************************************************************


#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
	
    char ChangAn[20]={'\0'};
    string str("Xi'an university of post & Telecommunication");
	int length =str.copy(ChangAn,10,6);
	
	cout<<"ChangAn contains: "<<ChangAn<<endl;
	return 0;
}


copy是从字符串第6个位置开始然后复制10个字符到数组

*********************************************************************************************************************************
#include <iostream>
#include<string>
using namespace std;

int main(int argc, char** argv) {
	
     string firstlevel("cn");
     string secondlevel("edu");
     string thirdlevel("xupt");
     string scheme("http://");
     string hostname;
     string url;
     
     hostname="www."+thirdlevel+'.'+secondlevel+'.'+firstlevel;
     url=scheme+hostname;
     
     cout<<url<<endl;
     
	return 0;
}
在C++中+可以进行字符串的连接
*********************************************************************************************************************************
#include <iostream>

#include <string>

int main ()
{
  string str1 ("green apple");

  string str2 ("red apple");
  if (str1.compare(str2) != 0)
   cout << str1 << " is not " << str2 << '\n';
  if (str1.compare(6,5,"apple") == 0)
    cout << "still, " << str1 << " is an apple\n";
  if (str2.compare(str2.size()-5,5,"apple") == 0)
    cout << "and " << str2 << " is also an apple\n";
  if (str1.compare(6,5,str2,4,5) == 0)
  cout << "therefore, both are apples\n";
  return 0;







 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值