c++编程易错点(积少成多)

define和typedef
#include<iostream>
#include<string>
#define a int*
typedef int* b;

using namespace std;

int main()
{
	int * p1, p2;
	//p1 = 1;//错误,p1是指向整型的指针,p2是整数
	p2 = 1;
	a p3, p4;
	//p3 = 1;错误//p3是指针
	p4 = 1;//p4是整数
	b p5, p6;//p5和p6都是指针
	p5 = 0;//0可以给指针赋值
	//p5 = 1;错误
	//p6 = 1错误
	return 0;
}

string和vector操作易忘点

#include<iostream>
#include<list>
#include<array>
#include<vector>
#include<string>

using namespace std;

int main()
{
	array<int,10>m;//标准库数组
//	array<int, 10>n = m;//内置数组是不允许直接赋值的
	vector<int>c = { 1,2,3,4,5 };
	//list<int>a(c);erro 用一个容器初始化另一个容器时,容器类型和元素类型必须完全一致
	list<int>a(c.begin(), c.end());
	//但用迭代器赋值时,只要求容器的元素类型相同
	//cout << c.size();
	string s = "123";
	string s1(s, 1);
	s = s.substr(0, 1);//返回s中从下标0到下标1的位置
	//s(s, 1);erro//不能用来给自身初始化
	auto pos = s.find("qq");//寻找第一次出现的位置
	//没有就返回npos
	return 0;
}

结构体定义的指针问题

#include<iostream>
#include<list>
#include<array>
#include<vector>
#include<string>
//#define a int*
//typedef int* b;

using namespace std;

struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
	
};
int main()
{
	int *p1 = new int;
	TreeNode *p3 = (TreeNode*)malloc(sizeof(TreeNode));//这个可以写入
	//TreeNode* p3(0);
	TreeNode* p;// 这句话相当于TreeNode* p=NULL;
	//p->val = 1;//编译不会报错,但无法写入,因为为NULL
	//p->left = NULL;
	TreeNode* p2 = new TreeNode(0);
	TreeNode p2(4);
	//TreeNode p2(4);错误,指针和对象寻址级别不同
	return 0;
}
c++动态创建二维数组定义
int **a=new int*[m];//行数
for(int i=0;i<m;i++)
a[i]=new int[n];
getchar()和putchar()
char l,m;
	l=getchar();//getchar可读取空格
	putchar(l);//输出不会换行
	getchar();//读取一个字符
	m=getchar();//m为输入的第三个字符
   cout << m << endl;
	cout << 22;
vector初始化问题
正确初始化方法
int n ;
cin>>n;
vector<int>a(n);//初始化为n个0
错误初始化方法
int n ;
vector<int>a(n);//未分配内存,出错
cin>>n;

猜你喜欢

转载自blog.csdn.net/weixin_43425693/article/details/90018573