反转整数
一、C++中"?:"的具体用法
相当于if...eles
z = a>b ? x:y
//相当于
if(a>b)
z=x;
else
z=y;
vector<int> c;
c.reserve(a.size()); //a是要被反转的vector
//方法一:使用vector自带的反转迭代器reverse_iterator,rbegin(),rend()
//rbegin() 将vector反转后的开始指针返回(其实就是原来的end-1)
//rend 将vector反转的结束指针返回(其实就是原来的begin-1)
for(vector<int>::reverse_iterator it=a.rbegin(); it!=a.rend(); ++it)
c.push_back(*it);
只出现一个数
一、异或解法
一个整数和它本身异或之后为0,0与其他整数异或得到的是这个整数本身
a^b = b^a
a^b^c = a^(b^c) = (a^b)^c
int xor = 0; for (int i = 0; i < nums.length; i++ ) { xor ^= nums[i]; } return xor;
如果有数组[a,b,c,a,d,b,c]
相当于a^b^c^a^d^b^c = (a^a)^(b^b)^(c^c)^d = d
迭代器
一、迭代器类型
拥有迭代器的标准库类型都是使用:iterator 和 const_iterator来表示迭代器类型:
iterator it能读写元素
const_iterator只能读元素,不能修改元素
二、迭代器介绍
类似于指针,它也提供对对象的间接访问,迭代器是c++中才有的。其中begin()复制返回指向第一个元素的迭代器,end成员返回指向尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素,所以end返回的是尾后迭代器。
一般我们清楚一个迭代器的准确类型是什么,所以我们都是使用auto或dectltype来定义变量的
vector<int> a;
auto b = a.begin();
decltype(v.begin()) b = a.begin();
标准迭代器的运算符
*iter 返回迭代器iter所指元素的引用
iter->men 解引用iter并获得该元素的名为men的成员,相当于(*iter).men
++iter 令iter指示容器的下一个元素
--iter 令iter指示容器的上一个元素
== 如果指示的是同一个元素则相等
<,>,>=,<= 位置离begin近的较小
2018/6/24