码迷,mamicode.com
首页 > 编程语言 > 详细

C++ STL容器的使用

时间:2021-03-08 13:21:36      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:void   函数的参数   输入   bcd   end   size_t   wap   引用   operator   

vector

begin()返回指向第一个元素的迭代器
end()返回指向最后一个元素的迭代器
rbegin()返回指向最后一个元素的迭代器
rend()返回指向第一个元素的迭代器
size()返回容器的元素的个数
max_size()返回容器的最大的元素的个数
resize()重新调整容器的容量,无论原来的容量是大于还是小于后来的恶容量都可以
myvector.resize(5);将容器的容量调整为5,如果变短了就直接删除多余的元素,长了就用0将剩余的空间填满
myvector.resize(8,100);将容器的容量调整8,并将多出来的位置用100表示
myvector.resize(12);将容器的容量调整为12,多出的空间用0填充
capacity()返回这个容器在内存空间中最多的连续空间
empty()测试这个容器是不是空的
reserve()重新调整容器的capacity
at(i)返回位置为i处得元素的引用,当超出容器的最后一个位置就抛出一个异常
front()返回第一个元素的引用
back()返回最后一个元素的引用
void assign ( InputIterator first, InputIterator last );将迭代器first和迭代器last之间的元素付给调用这个方法的容器
void assign ( size_type n, const T& u );将n个u付给容器
push_back()在容器的末尾添加元素
pop_back()删除容器最后面的一个元素
iterator insert ( iterator position, const T& x );在迭代器position的前面插入元素x
void insert ( iterator position, size_type n, const T& x );在position的前面插入n个x
template <class InputIterator>
void insert ( iterator position, InputIterator first, InputIterator last );将迭代器first和last之间的元素插入到position前面
iterator erase ( iterator position );删除迭代器position指向的元素
iterator erase ( iterator first, iterator last );删除迭代器first和last之间的元素,不包括last指向的元素
void swap ( vector<T,Allocator>& vec );交换两个容器的元素
void clear ( );清空容器当中的元素

map

begin()返回指向第一个元素的迭代器
end()返回指向最后一个元素的迭代器
rbegin()返回指向最后一个元素的迭代器
rend()返回指向第一个元素的迭代器
empty()测试map容器是不是空的
size()返回容器的大小
max_size()返回容器最大的容量,这个是相对于内存来讲的
insert()向容器中插入元素
erase(it)删除容器当中it指向的元素,it为迭代器
erase(‘c‘)删除容器中键值为‘c‘的元素
eras(it, mymap.end())删除容器中it和mymap.end()之间的元素,它们两个都是迭代器
foo.swap(bar)交换容器foo和bar中的元素
clear()清空容器
find(‘b‘)返回指向键值为‘b‘的的迭代器,没有的话就指向end()
count(‘c‘)查找键值为‘c‘的元素,在map中返回0或者1,0表示没有这个键值,1表示有,但是在mutimap中就是这个键值出现的次数
lower_bound(‘b‘)返回指向键值为‘b‘的迭代器,当没有这个键值时就返回空的迭代器
upper_bound(‘b‘)返回指向键值为‘b‘的下一个元素的迭代器,没有的话就返回空的迭代器

set

set容器(只存储值不相同的元素,并且按照从小到大的顺序排列)
iterator begin ();返回指向set容器第一个元素的迭代器
iterator end ();返回指向容器最后一个元素的迭代器
reverse_iterator rbegin();返回指向容器最后一个元素的迭代器
reverse_iterator rend();返回指向容器第一个元素的迭代器
bool empty ( ) const;测试容器是否为空
size_type size() const;计算容器当中元素的个数
size_type max_size () const;计算容器的最大容量
pair<iterator,bool> insert ( const value_type& x );将元素x插入到set容器中返回pair对象,first元素为指向插入的元素的迭代器,second元素为指示插入成功与否的bool值
iterator insert ( iterator position, const value_type& x );将x插入
template <class InputIterator>
void insert ( InputIterator first, InputIterator last );将first与last只见到恶元素插入到容器中
void erase ( iterator position );删除position位置处得元素
size_type erase ( const key_type& x );删除值为x的元素
void erase ( iterator first, iterator last );删除迭代器first和last之间的元素
void swap ( set<Key,Compare,Allocator>& st );交换两个set容器的元素
void clear ( );清空set容器

stack

bool empty ( ) const;测试栈是不是空的返回1表示空0表示非空
size_type size ( ) const;返回当前栈的元素的个数
value_type top ( );返回当前的栈顶元素,不删除这个元素
const value_type top ( ) const;返回栈顶元素的const引用
void push ( const T& x );将当前的元素x入栈
void pop ( );删除栈顶元素

queue

bool empty ( ) const;测试当前队列是不是空,0表示空,1表示非空
size_type size ( ) const;队列的元素的个数
value_type& front ( );返回队首元素的引用
const value_type front ( ) const;返回队首元素的const值
value_type& back ( );返回队尾元素的引用
const value_type& back ( ) const;返回队尾元素的const值
void push ( const T& x );将x入队列
void pop ( );删除队首元素

multiset, multimap, 基于平衡二叉树(红黑树),动态维护有序序列

size()
empty()
clear()
begin()/end()
++, -- 返回前驱和后继,时间复杂度 O(logn)
set/multiset
    insert()  插入一个数
    find()  查找一个数
    count()  返回某一个数的个数
    erase()
        (1) 输入是一个数x,删除所有x   O(k + logn)
        (2) 输入一个迭代器,删除这个迭代器
    lower_bound()/upper_bound()
        lower_bound(x)  返回大于等于x的最小的数的迭代器
        upper_bound(x)  返回大于x的最小的数的迭代器
map/multimap
    insert()  插入的数是一个pair
    erase()  输入的参数是pair或者迭代器
    find()
    []  注意multimap不支持此操作。 时间复杂度是 O(logn)
    lower_bound()/upper_bound()

bitset, 圧位

bitset<10000> s;
~, &, |, ^
>>, <<
==, !=
[]

count()  返回有多少个1

any()  判断是否至少有一个1
none()  判断是否全为0

set()  把所有位置成1
set(k, v)  将第k位变成v
reset()  把所有位变成0
flip()  等价于~
flip(k) 把第k位取反

deque, 双端队列

size()
empty()
clear()
front()/back()
push_back()/pop_back()
push_front()/pop_front()
begin()/end()

priority_queue, 优先队列,默认是大根堆

和队列基本操作相同:

top 访问队头元素
empty 队列是否为空
size 返回队列内元素个数
push 插入元素到队尾 (并排序)
emplace 原地构造一个元素并插入队列
pop 弹出队头元素
swap 交换内容
定义成小根堆的方式:
priority_queue<int, vector<int>, greater<int>> q;
定义成大根堆的方式:
priority_queue<int, vector<int>, less<int>> q;
用pair做优先队列元素:
priority_queue<pair<int, int> > a;
规则:pair的比较,先比较第一个元素,第一个相等比较第二个。
用自定义类型做优先队列元素:
struct node {
int a,b,c;
//友元方式进行strut函数的重载 可以统一应用于stl
friend bool operator < (node s1,node s2) {
//大根堆  反过来就是小根堆
	if(s1.a!=s2.a) return s1.a<s2.a;
	else if(s1.b!=s2.b) return s1.b<s2.b;
	else return s1.c<s1.c;
	}
};
priority_queue<node> q;

<ctype.h>头文件

tolower(char c)函数,tolower()函数的参数是字符类型。	
toupper(char c)函数,toupper()函数的参数也是字符类型。
strlwr()将字符串变小写
strupr()将字符串变大写

cctype头文件增加:
isdigit() 用来判断一个字符是否是数字。
isalnum() 用来判断一个字符是否为英文字母或数字,相当于 isalpha(c) || isdigit(c)
isalpha() 用来判断一个字符是否是英文字母,相当于 isupper(c)||islower(c)

<math.h>头文件

fabs(double x)
  :对double类型变量取绝对值。

floor(double x)
  : 对double 类型变量向下取整

ceil(double x)
  : 对double 类型变量向上取整

pow(double x,double y)
  : 求 x^y 


sqrt(double x)
  : 对double 类型变量求算术平方根。

log(double x)
  : 对double 类型变量求以自然对数为底的对数。


round(double x)
  : 对double 类型变量x进行四舍五入。

sscanf()和sprintf()

流输入输出函数,sscanf可以实现一次性的多个分割:


比如:
将字符数组str中的内容按 "%d:%lf,%s"的格式
写到int型变量n、double型变量db、char型数组变量str2中。

sscanf(str,"%d:%lf,%s",&n,&db,&str2);

相对应的反操作:

sprintf(str,"%d:%lf,%s",n,db,str2);

string的小技巧

string a="abcdeffdfsfsd";

string b=string(a,5);

cout<<b;

最终输出的是:ffdfsfsd

容器遍历方式

vector<int> sq;
for(int v : sq) //v=sq[i]

vector<vector<int>> sq;
for(auto it : sq) //it=sq[i]

其他容器类似
传送容器的时候尽量用引用!!!

C++ STL容器的使用

标签:void   函数的参数   输入   bcd   end   size_t   wap   引用   operator   

原文地址:https://www.cnblogs.com/coderJ-one/p/14492317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!