STL基础
vector:
1.头文件#include<vector>
2.声明vector对象,vector<int> vec;
3.尾部插入a:vec.push_back(a);
4.使用下标访问元素,cout<<vec[0]<<endl;
5.使用迭代器访问元素:
for( vector<int>::iterator it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;
6.插入元素: vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;
7.删除元素: vec.erase(vec.begin()+2);删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
8.向量大小:vec.size();
9.清空:vec.clear();
10.重载<
struct MyObject
{
int x;
int y; bool operator< (const MyObject &a) const
{
if(x!=a.x)
return x<a.x;
else
return y<a.y;
}
};
tip:关于结构体定义的几种情况:
struct Student
{
string name;
}Stu; struct
{
string name;
}Stu; typedef struct Student
{
string name;
}Stu; typedef struct
{
string name;
}Stu;
set: set<int> s;
1.元素插入:insert()
2.遍历:
set<int>::iterator it;
for(it=s.begin();it!=s.end();it++)
4.元素删除
s.erase(2); //删除键值为2的元素
s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
set<int>::iterator it;
it=s.find(5); //查找键值为5的元素
if(it!=s.end()) //找到
cout<<*it<<endl;
else //未找到
cout<<"未找到";
6.自定义比较函数
(1)元素不是结构体:
//自定义比较函数myComp,重载“()”操作符
struct myComp
{
bool operator()(const your_type &a,const your_type &b)
[
return a.data-b.data>;
}
}
set<int,myComp>s;
set<int,myComp>::iterator it;
(2)如果元素是结构体,可以直接将比较函数写在结构体内。
struct Info
{
string name;
float score;
bool operator < (const Info &a) const
{
return a.score<score;
}
}
set<Info> s;
set<Info>::iterator it;
stack:
1.入栈:s.push(x);
2.出栈:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素。
3.访问栈顶:s.top()
4.判断栈空:s.empty(),当栈空时,返回true
5.访问栈中的元素个数:s.size()
queue:
1.入队:q.push(x); 将x 接到队列的末端。
2.出队:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
3.访问队首元素:q.front(),即最早被压入队列的元素。
4.访问队尾元素:q.back(),即最后被压入队列的元素。
5.判断队列空:q.empty(),当队列空时,返回true。
6.访问队列中的元素个数:q.size();
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.反向遍历:利用反向迭代器reverse_iterator。
例:
set<int> s;
......
set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
set<int> s;
s.erase(2); //删除键值为2的元素
s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
set<int> s;
set<int>::iterator it;
it=s.find(5); //查找键值为5的元素
if(it!=s.end()) //找到
cout<<*it<<endl;
else //未找到
cout<<"未找到";
6.自定义比较函数
(1)元素不是结构体:
例:
//自定义比较函数myComp,重载“()”操作符
struct myComp
{
bool operator()(const your_type &a,const your_type &b)
[
return a.data-b.data>0;
}
}
set<int,myComp>s;
......
set<int,myComp>::iterator it;
(2)如果元素是结构体,可以直接将比较函数写在结构体内。
例:
struct Info
{
string name;
float score;
//重载“<”操作符,自定义排序规则
bool operator < (const Info &a) const
{
//按score从大到小排列
return a.score<score;
}
}
set<Info> s;
......
set<Info>::iterator it;
优先队列:
1.priority_queue<int> qi; //普通的优先级队列,按从大到小排序
2.priority_queue<int, vector<int>, greater<int> > qi2; //从小到大的优先级队列,可将greater改为less,即为从大到小
其他内容:
c语言常用函数:
#include <math.h>
int abs( int x)
double fabs(double x)
double pow(double x,double y)
double sin(double x)
double sqrt(double x)
double log(double x) //Ln
double log10(double x) //Log10
#include <ctype.h>
int isalnum(int ch) //是否字母或数字
int isalpha(int ch) //是否字母
int isdigit(int ch) //是否数字
int islower(int ch)
int tolower(int ch)
int toupper(int ch)
#include <string.h>
char *strcat(char *s1,char *s2) //把字符串s2接到s1后面
char *strchr(char *s,int ch) //在s所指字符串中,找出第一次出现字符ch的位置
int strcmp(char *s1,char *s2) //对s1和s2所指字符串进行比较
char *strcpy(char *s1,char *s2) //把s2指向的串复制到s1指向的空间
unsigned strlen(char *s)
char *strstr(char *s1,char *s2) //在s1所指字符串中,找出字符串s2第一次出现的位置,返回找到的字符串的地址,找不到返回NULL
#include <stdio.h>
FILE *fopen(char *filename,char *mode)
int fclose(FILE *fp)
int getchar(void)
int putchar(char ch)
int fread(char *pt,unsigned size,unsigned n, FILE *fp) //从fp所指文件中读取长度size为n个数据项存到pt所指文件
int fwrite(char *pt,unsigned size,unsigned n, FILE *fp) //把pt所指向的n*size个字节输入到fp所指文件
#include <stdlib.h>
void *malloc(unsigned size)
void *realloc(void *p,unsigned size) // 把p所指内存区的大小改为size个字节
C++常用函数:
algorithm
sort(a,a+20,cmp)
bool cmp( int a, int b )
{ return a>b; }
string _strrev(string str) //返回一个逆置字符串的指针
int test1(){
char s[100];
int len;
while((len=getline_(s,100))>0)
printf("%s\n",s);
return 0;
}
STL基础的更多相关文章
- c++中级 STL基础学习(二)
deque 和vector差不多,可以在前端后端插入,一般用deque取代vector,vector只能在后端插入push_back().deque还可以push_front(),但是deque后端插 ...
- STL基础知识
一,STL的组成 1.什么是STL STL(Standard Template Library)标准模板库的简称,是由惠普开发的一系列软件的总称,STL现在是C++的一部分,已经被构建于编译系统之内, ...
- STL基础复习
stl容器:vector,deque,list,map/multimap,set 特殊容器:stack,queue,priority_queue 通用操作 size() 返回当前容器元素数量 emp ...
- STL基础--算法(排序)
STL排序算法 排序算法要求随机访问迭代器 vector, deque, container array, native array 例子 vector<int> vec = {9,1,1 ...
- STL基础--仿函数(函数对象)
1 首先看个仿函数的例子 class X { public: void operator()(string str) { // 函数调用运算符,返回类型在operator之前 cout << ...
- STL基础--迭代器和算法
1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; ...
- STL基础--容器
容器种类 序列容器(数组,链表) Vector, deque, list, forward list, array 关联容器(二叉树),总是有序的 set, multiset根据值排序,元素值不能修改 ...
- STL基础--基本介绍
为什么要使用C++标准库 /* * 为什么使用C++标准库: * 1. 代码重用,不用重新造轮子 * 2. 效率(快速,且使用更少的资源). 现代C++编译器经常对C++标准库的代码有优化 * 3. ...
- STL基础4:deque
#include <iostream> #include <queue> #include <string> using namespace std; #defin ...
随机推荐
- 理清JavaScript正则表达式--上篇
在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...
- K-Means聚类算法原理
K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体 ...
- Python(五)模块
本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...
- OSGi 基本原理
定义 OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统. 这个框架实现了一个优雅.完整和动态地组价模型.应用程序(称为bundle)无序重新引 ...
- 嵌入式服务器jetty,让你更快开发web
概述 jetty是什么? jetty是轻量级的web服务器和servlet引擎. 它的最大特点是:可以很方便的作为嵌入式服务器. 它是eclipse的一个开源项目.不用怀疑,就是你常用的那个eclip ...
- 支付宝PC即时到账和手机网站支付同步
前几个月做了一个旅游网站,有PC站和手机站,涉及支付宝支付功能. 要求:PC站下的单,用户用手机登录也能支付;同理,手机站下的单,PC端登录也能支付. 附支付宝开放平台网址:即时到账 ,手机网站支付. ...
- α-β剪枝算法的java语言实现(非常实用)
利用α-β剪枝算法,对下图所示的博弈树进行搜索,搜索得到根节点选择的走步,以及没有必要进行评估的节点,并求出给出在何处发生了剪枝,以及剪枝的类型(属于α剪枝还是β剪枝). 注:□表示MIN节点:○表示 ...
- Linux安装MySQL
步骤: 1 [qq@localhost Desktop]$ su root //以root身份进入 Password:(默认为空) 2 [root@localhost Desktop]# yum ...
- 高效 Java Web 开发框架 JessMA v3.4.1
JessMA 是功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate.MyBatis 与 J ...
- JQuery操作类数组的工具方法
JQuery学习之操作类数组的工具方法 在很多时候,JQuery的$()函数都返回一个类似数据的JQuery对象,例如$('div')将返回div里面的所有div元素包装的JQuery对象.在这中情况 ...