C++

vector类型
v.size() 表示vector存入元素的个数
vector::push_back //在矢量末尾处添加一个元素。
for ( int num:nums )//括号里即声明一个变量num遍历数组nums,把值赋给num
charAt()方法 //返回 String 对象的指定索引处的字符
push_back() //添加入结果
back() //返回向量中最后一个元素的引用
insert() //插入到指定位置
end() //是否超出末尾
unique() //移除相互靠近的位于指定范围的元素复制
erase() //移除指定位置的元素

主要方法:
find、count、insert、erase、empty、size

vector<double> vd(n); #创建还有n个元素的数组vd
array<typeName, m_elem> arr; #创建含有n_elem个元素的数组arr
priority_queue<int> qi;

    int a[len] = {3,5,9,6,2};

    priority_queue<int> qi;
    for(i = 0; i < len; i++)
        qi.push(a[i]);

    for(i = 0; i < len; i++)
    {
        cout<<qi.top()<<" ";
        qi.pop();
     }      #在优先队列中,优先级高的元素先出队列。

unordered_map<char,int> counts; 
#unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同

unordered_set类
头文件 ,包含两个类 unordered_set和unordered_multiset。
unordered_set:
注意:此集合里存放的元素是无序的,此容器存放不同的、不重复的元素。元素的值就是元素的key。为了便于快速存取,元素按照元素的值的hash,分配到不同的bucket里面。一旦放到容器里,元素的值就是不可改变的。此容器的访问比set容器要快,虽然可能部分子集的元素迭代要慢一点。
模板特化
max()//较大值
1. 模板的特化是在已有的通用模板不再适用于一些特殊的类型参数时,而针对这些特殊的类型参数专门实现的模板。
2. 函数调用匹配的规则是:先精确匹配类型参数,然后匹配函数模板,最后通过参数隐式类型转换进行匹配。
sort(数组名,数组末地址,compare) //若不写compare则默认升序排列,需要#include
例如:sort(a,a+10); //将数组a以升序排序,假设先前定义了a[10]并输入了数据

引用、const
引用是 一个变量 两个名字,常作为函数形参;
const 是参数不匹配时,形成临时变量,结束后随意删除;能不改变传入的结构
指针

int h;
int* p=&h;  # 将一个int变量的地址赋值给指针int* p=new int;


vector<int>ivec1(10,42); //内置方法,初始化的内容为10个42  #vector的初始化方法
int myarray[5] = {1,3,5,7,9};  // #vector的赋值方法2
vector<int> myvector(myarray , myarray+5);

String 字符串
Substring() 检索子字符串
引用

?
(msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
我只从这一句话入手,msvcr100.dll,这是有关控制台的一些函数的dll,包括printf之类的,0xC0000005这个异常是访问异常,在0x00000000这个地址,说明是往空指针区域写数据了,因为零地址在r3下一般是不可读写的。
至于调试方法,看调用堆栈,然后看是哪儿往空指针写数据了,就可以迎刃而解了。

对组

类模板:template <class T1, class T2> struct pair
T1是第一个值的数据类型,T2是第二个值的数据类型。
功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。

哈希表

unordered_set<int> record(num.begin(),num.end());  //创建散列表,将数组的不重复元素映射到散列表上
while(record.find(prev) != record.end())    //找到前一个元素,删除,并且继续向前查找
                record.erase(prev--);

下一个————
unordered_multiset:
与unordered_set类似,唯一的区别就是允许存在多个重复值;相同值得元素被放到同一个bucket里面。


----------


find()方法,哈希表搜是O(1),因为每个数字只会添加一次,删除一次,所以复杂度是O(n)

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

哈希表hashtable(key,value) 的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。
而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位

迭代器
一个迭代器是一个指针,例如一个指向数组的首元素的指针

for( iterator i=start; i!=end; i++)
     cout<< *i <<" ";

auto 与 new
使用auto变量的优势是不需要考虑去变量是否被释放。
new:new是用来在堆上申请内存地址的关键字,他产生的变量不会自动释放,除非delete来手动释放,或者程序结束时由操作系统释放,使用new的优势是内存使用比较灵活,理论可以申请任意大小的内存区块(实际与操作系统有关)。new一般都是在类的定义中使用,结合delete可以使包含new出来对象的类也具有自带变量功能,这样就继承了两种方式的优势。

bitset类
二进制比特位的操作

bitset<32>(n).count() == 1;

逻辑运算符号、移位运算符
&& 有表达式的时候
& 单个数字的时候
<<左移 >>右移

递归 VS 迭代
递归的基本概念:程序调用自身的编程技巧,即函数自己调用自己.
迭代:利用变量的原值推算出变量的一个新值.
两者可以相互转换,递归调用函数缺点是浪费空间,并且递归太深容易造成堆栈的溢出.
i++ VS ++i
由于后置操作符要返回未加1前的值作为操作的结果,所以必须要保存操作数原来的值,对于比较复杂的类型,这种额外工作可能会花费更大的代价。建议多使用前置操作符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值