【学习笔记】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

做题时常常会遇到学过,但又忘记的C语言知识点,现将一些常用的c/c++工具记录在此。


vector

vector是c++中常用的数组容器,采用alloc动态存储。每次到达上限,依据现有长度,动态增加。在内存中寻找一块更大的连续地址,再将现有内容转移。
insert数据时,将增加数据的地址以及之后的所有内容向后移动一个单位,再将数据填入其中。
erase数据时,将该数据之后的每个数据向前移动一个单位。所以insert和erase非常占用内存。
常用的如:

push_back();

void push_back(const T& x){
	if(finish != end_of_storage){
		constuct(finish,x);
		++finish; //如果有剩余空间,在最后添加数据
	}else{
		insert_aux(end(),x);
		//构造新的空间,并且将新空间前半段放原来的数据,后半段准备放新的数据。
	}
}

pop_back();

void pop_back(){
	--finish;//表示最后一个元素的后一个位置,即调用end();
	destory(finish);//调用被取出数据的析构函数。
}

erase();

iterator erase(iterator first,iterator last) 
//清除[first,last]中的所有元素
iterator erase(iterator position)
//清除position位置的元素

删除指定位置的元素后,将后面的元素依次往前转移。

insert

void insert(iterator position,size_type n,const T& x){
	//判断剩余空间够不够放新增加的元素
	//如果够放
	if(true){
		//将插入点后面的数据往后移
		//再将元素依次插入到插入点。
	}else{//如果不够放
		//配置新的,更大的空间,再将旧的数据放入新空间。
		//然后按上述方法,数据后移再插入新数据。
	}
}

list

list 是c++中的双向链表。且list是一个环状双向链表。

template <class T>
struct __list_node{
	typedef void* void_pointer;
	void_pointer prev;//类型为void*
	void_pointer next;
	T data;//类型与模板一致
}

list对元素的操作有:
push_front
push_back
erase
pop_front
pop_back
clear
remove
unique
splice
merge
reverse
sort

map

map的特性是:所有元素都会根据元素的键值自动被排序。map的所有元素都是pair,同时拥有实值(value)和键值(key);
标准STL map以红黑树作为底层机制,又由于map的各种操作接口RB-tree也提供了,所以几乎所以的map操作都是调用RB-tree的操作行为。其查找插入都是O(Logn)
STL中还有unordered_map,它的底层是哈希表,是无序的,查找和插入都是O(1);
map与unordered_map的区别

find

很久没有用到这个函数,以为是容器自带的,找了好久没有,才想起来是个独立函数。

vector<int>::iterator it=find(vin.begin(), vin.end(), q.front());

使用find函数,提供需要寻找的范围,以及寻找的内容。返回值是个指针或者说迭代器。

这个是C的语法。我把这个find和C++中string的成员函数find搞混了;

String

c++中比较常用的字符串,内建许多函数,在这里列出几个常用的。

tolower

将字符串中的大写字母转换为小写字母。若非大写字母,则保持不变。
同样的还有toupper;

find

str.find(char c,int pos)
返回字符串中该字符的位置,第二个参数为起始位置,缺省值为0即从头开始。
str.rfind()
反向查找,从最后一个字符往前搜索。

int pos=0;
while(pos=str.find(flag,pos)!=-1)
{
	cout<<pos<<endl;
	pos++;
}

这个技巧可以找出整个字符串中所有的flag元素。

cout

cout.width(8)
输出的宽度为8,不足8个自动补齐。
cout.fill(‘0’),自动补齐为数字0;
cout<<left
左对齐,即输出不足8个时,已有内容从左边开始输出,如abcd0000;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值