自己总结的一些小知识点,希望能够对大家有帮助。
bool:1
char:1
wchar_t:2
char16_t:2
char32_t:4
short:2
int:4
long:4
long long:8
float:4
double:8
long double:8
unsigned char:1
signed char:1
unsigned char:2
unsigned long:4
unsigned long long:8
在C++中变量为存储空间
对象是指一块能存储数据并且具有某种类型的内存空间
c++11用{}初始化得到全面的应用
任何函数体之外的变量被初始化0,函数体之内的不被初始化
用户自定义标识符不能连续出现两个_(下划线),也不能以下划线紧连大写字母开头,函数体外的标识符不能够使用下划线开头
引用必须被初始化,由于引用无法重新绑定到另外一个对象 ,引用类型的初始化必须是一个对象 ,引用不是对象,没有实际地址 int &a=m;
#include cstdlib
int *p=nullptr;使用关键字nullptr初始化指针
int *&r = p //p为int类型指针
const int d=512; 默认状态只在文件内有效
如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字
const int i=1024;const int &r=ci对常量的引用,常量的引用不允许修改常量的值
int i = 40; int &a=i; const int &b=i; //本例子中,可以通过a改变i的值,但不能通过b改变i的值
存放常量对象的地址,只能使用指向常量的指针 for example:const int i=10;const int *p=&i;
把*放到const之前说明指针是一个常量,不变的是指针本身而不是指向的那个值
const int *a=m;为指向常量的指针,不能够改变其所指向常量的值,不能够通过指针去改变指向对象的值
comst *int a=m;为常量指针,不能够改变指针本身的值,而不是所指向的值
如果要求变量和指针都为常量const int *a=10;,需要使用const int *const p=&a;,如果为int a=1;则都可以
声明为constexpr的变量一定是一个常量
typedef 和 using 都可以定义别名 for example : typedef char name; using name=char;
auto item = val1+val2;item的值由val1+val2决定,系统会更具后面的值自动分析出item的类型c++11
如果希望推测出的auto类型是一个const需要明确指出:const auto f = a;
decltyde返回操作数的类型 decltyde (f()) sum = x;
string a(n,’c’);//使用n个c为a初始化
string a;cin>>a; //当输入hello world时,a的值仅为hello,string会从第一个真正字符开始读取,直到遇到一处空白未知
string a; a.getline(流cin,string对象),a.empty()判断是否为空,a.size()返回的是一个无符号的整数,a[n]读取string中第n个字符,从0开始计算
for(auto c:string)循环遍历字符串
cctype头文件中包含很多对字符char的处理
vector容器,初始化vector对象vector<int> a(10);//a有10个元素,每个值都是0;vector<int> a(10,1);//a有10个元素,每个值都是1;
vector<int> a{10};//a有1个元素,值为0;vector<int> a{10,1};//a有2个元素,每个值都是1
vector的定义中()为对象构造vector,{}为初始化对象
vector 添加数据函数push_back(),读取函数为pop_back()
vector<int> a;for(int i=100;i>0;i–){a.push_back(i)}//为a赋值
for(auto c:a) cout<<c;//依次输出a的每个元素的值
vector<int>a;对象a可以通过下标去访问 for example :a[0],下标的标号从0开始
string a = “qqqq”; for (auto it = a.begin(); (it != a.end()) && (!isspace(*it)); ++it) cout<<*it<<endl;使用迭代器读取string单个元素,类似于使用a[n]访问单个元素
auto it=a.begin 返回第一个元素的指针,如果a.begin()=a.end()说明数组为空
迭代器默认根据参数类型返回普通指针或者常量指针,可是使用a.cbegin(),a.cend()获得常量指针const_iterator
->把解引用和成员访问两个操作结合起来,(*it).men和it->men 功能相同
注意:但凡使用了迭代器的循环体,都不要向迭代器所属容器添加元素
迭代器运算:iter = s.begin(),iter +n表示迭代器向前移动n个位子;iter – n表示迭代器向后移动n个位子;iter +=n表示将iter加n赋给iter;iter – =n表示将iter加n赋给iter;iter1 – iter2表示同一个容器内两个迭代器的距离;迭代器也可以使用<,>=,<,<=判断同一个容器内的两个迭代器的大小
数组可以采用下面方法访问int a[100] = {};for (auto s : a) cout << s;
大多数情况下,使用数组类型的对象其实就是使用一个指向该数组首元素的指针。int a[10] {};auto a2(a);使用auto 获得是一个一个指针,既a2是一个指针;使用decltype(a) a3;,其中a3为一个数组
int a[10]={};int *e= &a[10];//其中e为指向数组尾元素的下一个位子的的指针
在c++11中新增加类十余vector中的begin和end函数,但是函数需要传入的参数为数字,既int a[10] = {};int *pbeg = begin(a);int *pend = end(a);//pbeg为指向a首元素的指针,pend为指向a最后一个元素的下一个位置
int a[2]={};int *p=a;等价于int *p=&a[0];
在c语言中的几个函数strlen(p)//返回p的长度;strcmp(c1,c2)//比较c1,c2的相等性,如果c1==c2返回0,c1>c2返回正数,c1<c2返回负数;strcat(c1,c2)//将c2附加到c1后面;strcpy(c1,c2)//将c2拷贝到c1
int a[]={1,2,3,4};vector<int> v(begin(a),end(a));//用于创建一个vector变量,并且使用数组赋值,使用标准函数begin()和end()函数将数组的起始地址和结束地址指向数组的起始,结束地址,从而达到赋值
int ap[]={1,2,3,4,5,6,7,8,9,0};vector<int>vec(ap +1,ap +5); //使用数组第ap[1]到ap[5]初始化向量
int ia[3][4];int (*p)[4]=ia;//p指向含有4个整数的数组
int aa[5][5] = {0};for(auto &c:aa) for (auto &cc : c) cout <<cc<<endl;和for (auto p = aa; p != aa + 5; ++p) for (auto pp = *p; pp != *p + 5;++pp) cout<<*pp<<endl;和for (auto q = begin(aa); q != end(aa); ++q) for (auto qq = begin(*q); qq != end(*q); ++qq) cout << *qq << ” “;功能相同
假定p的类型为int* ,而decltype(*p)的结果是int&;decltype(&p)的结果是int**类型
C++11规定商一律向0取整,既直接切除小数点部分
string text;for(const auto &s:text)//这里s为text的常引用,他不会改变text的值