c++积累

1、在做LeetCode的时候发现sort函数不仅仅可以 使用默认的升序或者降序,还可以自己定义一个cmp函数,或者使用lambda表达式。 

sort(points.begin(), points.end(), mySort);
bool mySort(pair<int, int> a, pair<int, int> b){
         return a.first < b.first;
}

2、c++ STL 容器 begin() end() front() end()的用法

begin函数

函数原型:

iterator begin();

const_iterator begin();

功能:

返回一个当前vector容器中起始元素的迭代器。

end函数

函数原型:

iterator end();

const_iterator end();

功能:

返回一个当前vector容器中末尾元素的迭代器。

front函数

函数原型:

reference front();

const_reference front();

功能:

返回当前vector容器中起始元素的引用。

back函数

函数原型:

reference back();

const_reference back();

功能:

返回当前vector容器中末尾元素的引用。

例子:

vector<char> v1;

vector<char>::iterator iter2;

iter2 = v1.end()-1; //注意v1.end()指向的是最后一个元素的下一个位置,所以访问最后一个元素

cout << *iter2 << endl; 

3、expected unqualified-id before string constant

出现这种提示一般是在哪个地方少了一个“;”

4、const 修饰指针或者被指物

看"effective c++"第三条讲到: 只需要判断const是在 * 的左边还是右边即可。左边则是修饰被指物,即被指物是常量,不可以修改它的值;右边则是修饰指针,即指针是常量,不可以修改它的指向;在左右两边,则被指物和指针都是常量,都不可以修改。

#include<iostream>
using namespace std;
int main(){
	int c = 3;
	int a = 2;
	int b = 1 ;
	//const出现在*左边,则被指物是常量
	const int * pi = &a;
	*pi = b;//不正确 被指物是常量
	pi = &c; //正确 
	 //const 出现在* 右边,则指针是常量
	int * const p = &a; 
	p = &c;//不正确,指针是常量
	*p = c;//正确
	//const出现在*左右两边,则被指物和指针都是常量
	const int * const ptr   = &a;
	ptr = &c;//不正确,指针是常量
	*ptr = c;//不正确,被指物是常量
}

5、leetcode N 皇后问题 遇到的 "reference binding to null pointer of type 'value_type' "

       总是显示“ reference binding to null pointer of type 'value_type”,简直了!我想半天这result二维数组也没法赋初值啊!查好久!后来才看到是 vector<vector<int>> checkerBoard(n);我已经给checkerBoard手动分配了内存,然后又用了别人代码中的一句话checkerBoard.push_back(vector<int>()); 最后我的循环次数就只有4次,然后又开辟了4个空间,相当于我这个对象中8个对象,4个为空。。结果就引用指向了空值 = = 。。汗

6、【求教】对数组使用基于范围的for循环,出现需要“begin”函数的问题

在广度优先遍历的时候出现的问题, 范围for不能用于指针。

范围for必须用于
1. C风格数组
2. 实现了begin()和end()迭代器方法的容器

		while (!Q.empty()) {
			GraphNode* temp = Q.front();
			Q.pop();
        //报错没有begin函数
			for (auto i : temp) {
				indegree[i->label]--;
				if (indegree[i->label]) {
					Q.push(i);
				}
			}
		}

//写成了temp,就显示“基于此范围的for语句需要begin函数”,因为不是迭代器,temp 是GraphNode*的指针
//应该是他的领接点temp->neighbors,整好也是vector,有begin和end迭代器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值