I.vector

1.头文件:#include<vector>                        //容器vector是一个能实现随机存取、插入删除的动态数组,还可以当栈使。  

2.创建: vector<int> v1;                             // < >里可以是struct或者vector嵌套:vector< vector<int> > ivec;

vector是一个类模板,创建一个vector的过程称为实例化。

3.初始化:

  • vector<T> v2(v1);   //  效果同拷贝初始化 vector<T> v2=v1;
  • vector<T> v2(n,val);
  • vector<T> v2{a,b,c,d};  // vector<T> v2={a,b,c,d};
  • 数组指针
  • int iarray[]={,,,,,,,,,,};
    vector<int> v1(iarray,iarray+sizeof(iarray)/sizeof(int));

4.尾部插入数字:v1.push_back(a);     //  pop_back();

5.下标实现随机存取: v1[0]=a;

6.常用函数: empty()  size()  clear()  <=

7.使用迭代器访问元素.

vector<int>::iterator it;
for(it=v1.begin();it!=v1.end();it++)
cout<<*it<<endl;

8.插入和删除 insert,erase   配合迭代器,如删除所有值为8的元素

v1.insert(v1.begin()+i,a);  //在第i+1个元素前面插入a

v1.erase(v1.begin()+2);  //删除第3个元素

9.#include<algorithm>

(1) 元素翻转:

reverse(vec.begin(),vec.end());   //将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.)

(2)排序:

bool Comp(const int &a,const int &b){
return a>b;
} sort(vec.begin(),vec.end());  //升序排列
sort(vec.begin(),vec.end(),Comp)  //降序排序

II.string

1.头文件:#include<string>

2.创建与初始化:类似vector

3.写入读取:

  • cout<<s;  cin>>s;  //以空白(空格、换行、制表符)判断开始结尾,并忽略之  
  • getline(cin,s);    //读一行,以换行符判断结束,并抛弃换行符

4.empty, size, +, =, <, [],  append/push_back

5.关于字符变量的函数:isalnum,isalpha,isdigit / tolower,toupper       <cctype>

6.高级:  

  • 子串:  string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串
  • 交换:  void swap(string &s2);    //交换当前字符串与s2的值
  • 查找函数:
    • int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置
    • int find(const char *s, int pos, int n) const;//从pos开始查找字符串s中前n个字符在当前串中的位置
    • int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置

 

III.map

1.头文件:#include<map>                        //容器map是一个能实现key到value单射的关联容器,对应数据结构为hash表,其内元素按键值升序排列,键值唯一。

2.构造:map <string,int> m1;

3.添加元素: m1["hello"]=5;         //下标既能访问也能赋值也能添加,insert()添加效率高   insert(map<int, CString> :: value_type(2, "Two"))

4.常用函数: empty()  size()  clear()    迭代器  begin() , end(), erase()         // m1.erase("hi"); m1.erase(it); m1.erase(it,it+5);

5.按键值查找一个元素       //根据key值快速查找记录,查找的复杂度基本是Log(N)

  • 返回其迭代器:    find()       // if( m1.find("hi")==m1.end() )  如果该key不存在
  • 返回指定元素出现的次数:  count()

IV. struct

//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};

  

typedef struct rect
{
int id;
int length;   bool operator< (const rect &a) const
{
if(id!=a.id)
return id<a.id;
else
{
if(length!=a.length)
return length<a.length;
}
}
}Rect;

  

STL review:vector & string & map & struct的更多相关文章

  1. C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法

    每次忘记都去查,真难啊 /* C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法 */ /* vector常用用法 */ //头文件 #i ...

  2. Effective STL 学习笔记 Item 16:vector, string & C API

    有时需要支持 C 的接口,但这并不复杂. 对于 vector 来讲, \(v[0]\) 的地址 \(\&v[0]\) 即可作为数组指针传递给 C API: 1: // Legacy C API ...

  3. 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27705613 容器 3.0版本号之前Cocos2d- ...

  4. C++ 标准模板库(STL):vector

    目录 1. vector 1.1 vector的定义 1.2 vector容器内元素的访问 1.3 vector 常用函数实例解析 1.4 vector的常见用途 1. vector 变长数组,长度根 ...

  5. CPP-STL:vector容器

    1.     vector容器简介: vector向量容器是一种随机访问的数组类型,它提供了对数组元素的快速访问.随机访问,以及在序列尾部快速.随机地插入和删除操作.它类似于数据结构中的队列.数组和堆 ...

  6. STL源代码学习--vector用法汇总

    一.容器vector 使用vector你必须包含头文件<vector>: #include<vector> 型别vector是一个定义于namespace std内的templ ...

  7. 顺序容器:vector,deque,list

    1.顺序容器:vector,deque,list 容器类共享公共接口,只要学会其中一种类型就能运用另一种类型.每种容器提供一组不同的时间和功能这种方案,通常不需要修改代码,秩序改变类型声明,每一种容器 ...

  8. STL学习:STL库vector、string、set、map用法

    本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1 ...

  9. Effective STL 学习笔记: 多用 vector & string

    Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...

随机推荐

  1. Java包(package)详解

    java包的作用是为了区别类名的命名空间 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用.. 2.如同文件夹一样,包也采用了树形目录的存储方式.同一个包中的类名字是不同的,不同的包 ...

  2. NYOJ 814 又见拦截导弹

    又见拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 大家对拦截导弹那个题目应该比较熟悉了,我再叙述一下题意:某国为了防御敌国的导弹袭击,新研制出来一种导弹拦 ...

  3. Leetcode 392.判断子序列

    判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母.字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 ...

  4. linux删除N天前的文件

    列出一天之前的文件的属性用下面的命令:find . ! -mtime -1 -print |xargs ls -lfind . -mtime +1 要删除文件的话用下面的命令:find . ! -mt ...

  5. python 字典 key 和value 互换

    这里是一个可能有用的通过字典解析实现的小技巧: 交换字典的键和值. >>> a_dict = {'a': 1, 'b': 2, 'c': 3} >>> {value ...

  6. 【bzoj1174】[Balkan2007]Toponyms Trie树

    题目描述 给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化. 输入 第一行给出数字N.N在[2,1000000] 下面N行描述这些字符串,长 ...

  7. 【Luogu】P1868饥饿的奶牛(DP)

    题目链接 话说我存一些只需要按照一个关键字排序的双元素结构体的时候老是喜欢使用链式前向星…… DP.f[i]表示前i个位置奶牛最多能吃到的草.转移方程如下: f[i]=f[i-]; f[i]=max( ...

  8. 【Luogu】P2679子串(DP)

    题目链接 GuessYCB的题解讲的很棒.就这样. 因为这题我不会,而题解又讲的太全太详细太好了. #include<cstdio> #include<cctype> #inc ...

  9. [BZOJ3545] [ONTAK2010]Peaks(线段树合并 + 离散化)

    传送门 由于困难值小于等于x这个很恶心,可以离线处理,将边权,和询问时的x排序. 每到一个询问的时候,将边权小于等于x的都合并起来再询问. .. 有重复元素的线段树合并的时间复杂度是nlog^2n # ...

  10. 洛谷 [P3834] 可持久化线段树(主席树)

    主席树可以存储线段树的历史状态,空间消耗很大,一般开45n即可 #include <iostream> #include <cstdio> #include <cstri ...