Leedcode算法(二)

反转整数

一、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

猜你喜欢

转载自blog.csdn.net/zbgzzz/article/details/80788782
今日推荐