c++的一些小知识点

  • Post author:
  • Post category:其他



自己总结的一些小知识点,希望能够对大家有帮助。

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的值࿰



版权声明:本文为zhangyonggang886原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。