C++中STL的一些代码

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

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

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

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

我只是简单的练习容器, 这个先是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;
时间: 2024-09-30 09:54:17

C++中STL的一些代码的相关文章

理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)

我们知道ATL(活动模板库)是一套很小巧高效的COM开发库,它本身的核心文件其实没几个,COM相关的(主要是atlbase.h, atlcom.h),另外还有一个窗口相关的(atlwin.h), 所以拿来学习应该是很方便的.但是因为ATL的代码充满了模板和宏,内部还夹杂着汇编,所以如果没有比较丰富的C++模板和系统底层的知识,一般人会看得一头雾水. 下面我们主要分析一下ATL中的一些汇编代码. ATL中出现汇编代码主要是2处,一处是通过Thunk技术来调用类成员函数处理消息:还有一处是通过打开_

计算DXFReader中多边形的面积代码示例

在DXFReader中, 一般的多边形的面积计算绝对值 其中K表是顶点的数目,它们的坐标,用于在求和和, 所以用下面的代码就可以计算出一个封闭的多段线的区域: view source print? 01 Dim Vertex As Object 02 Dim Entity As Object 03 Dim k As Long 04 Dim i As Long 05 Dim Area As Single 06 07 With DXFReader1 08 09  For Each Entity In

设计模式中聚合和组合--代码中的实现

●引言: 最近一直在看设计模式,以前写过一篇文章:设计模式中的关系在代码中的实现 之后他们问我说:聚合和组合在代码上怎样表现出生命期的不同.因为当时是真心不懂,不敢回答,现在有一点点心得,和大家分享一下. ●定义: 聚合:表示两个对象之间是整体和部分的弱关系,部分的生命周期可以超越整体.如电脑和鼠标. ?大话上的聚合: ?大话上的组合: 表示两个对象之间是整体和部分的强关系,部分的生命周期不能超越整体,或者说不能脱离整体而存在.组合关系的"部分",是不能在整体之间进行共享的. ●异同点

编程算法 - 数字在排序数组中出现的次数 代码(C)

数字在排序数组中出现的次数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 统计一个数字在排序数组中出现的次数. 通过折半查找, 找到首次出现的位置, 再找到末次出现的位置, 相减即可. 时间复杂度O(logn). 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #inc

编程算法 - 数组中的逆序对 代码(C)

数组中的逆序对 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 在数组中的两个数字如果前面一个数字大于后面的数字, 则这两个数字组成一个逆序对. 输入一个数组, 求出这个数组中的逆序对的总数. 使用归并排序的方法, 辅助空间一个排序的数组, 依次比较前面较大的数字, 算出整体的逆序对数, 不用逐个比较. 时间复杂度: O(nlogn) 代码: /* * main.cpp * * Created on: 2014.6.12 * Author:

JS中模板嵌套学习(代码)

<script src="script/jquery-1.4.2.js"></script>    <script src="script/jsrender.js"></script>    <script id="header" type="text/x-jsrender">        <tr>               <th>序号&

在页面中插入flash的代码实例

在页面中插入flash的代码实例: 有时候网页中需要插入一个flash,作为一个媒体文件,将其引入当然需要一定的格式,下面就介绍一下如何实现辞此功能,不过建议还是使用工具插入,比如使用DW,它就有专门的可视化工具直接点击按钮插入就可以了. 代码如下: <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="62" height="62" type="a

iOS中UIWebView执行JS代码(UIWebView)

iOS中UIWebView执行JS代码(UIWebView) 有时候iOS开发过程中使用 UIWebView 经常需要加载网页,但是网页中有很多明显的标记让人一眼就能看出来是加载的网页,而我们又不想被人卡出来. 如网页中的这个导航 通常我们不需要WebView中的 导航栏,也不需要里面的返回上一级的交互.. 对WebView常用的另外一种功能就是对某个点击添加对用function实现JS调用OC的交互功能. 下面一一介绍: 1. UIWebView 调用JS代码 OC调用JS通常是,在webVi

asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题

最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception System.ArgumentException The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound] Description: HTTP 500.Error processing request. De