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;