cpp知识点摘录

来自 C++Primer5th中文版没有plus 轮子哥强势审校

由于已经会c、Java 所以与C语言一样的内容不再提及。适合:会C语言的人快速入门
持续更新

左右值

左值lvalue:有名字的变量,有地址的
右值rvalue:生命只存在这句话中

引用

int a=10,&x = a;
x为a的别名,类似于指针的封装。可以用于函数形式参数f(int &x)修改x。

底层 顶层const

int i = 0;
int *const p1 = &i;//顶层const 不能改p1
const int ci = 41;
const int *p2 =&ci;//底层const 指向一个const int
const int &r = ci;//引用都是底层const
//顶层 *在const左侧 底层 *在右侧

constexpr

constexpr:检测变量的值是否是一个常量表达式 constexpr int x = 10;编译时就得到计算
constexpr函数

using

别名 using interger = int;
类型别名不能简单替换

typedef char *pstring
const pstring cstr = 0;
const char *cstr = 0;
//二者不等价,前者cstr不可变,后者cstr指向的char不可变

库函数基本属于命名空间std,需显示标明std::cin。
可以用using std::cin或者 using namespace std;

头文件一般不应该使用using

auto

auto 让编译器去推断表达式所属类
int * ptr1 = 0; auto ptr2 = ptr1;
auto忽略引用、顶层const
如果希望auto是个顶层const 需明确指出 const auto f = ci;
还可以将引用设为auto auto &g = ci;

decltype

decltype 类型指示符 编译器分析表达式得到他的类型,却不实际计算表达式的值。
decltype(f()) sum = x;
decltype 返回const 和 引用在内的类型

//cpp primer里的一段例子
//看来cpp里的指针与引用有关,解引用实际上得到的是引用
int i = 42,*p=&i;
decltype(*p) c;//错误:c是int &,必须初始化

decltype((i)) d;//错误:双层嵌套时

string

cin>>s1;//cin读空格之前的内容,空格不读进去
getline(cin,s1);//读一整行,换行读进去 不存

string.size()返回size_type类型,无符号整数,尽量不要与int混用

比较的是字典顺序

相加时,需确保加号左右有一个是string

头文件

C name.h ->cpp cname,在cname中定义的名字属于std,而name.h则不然

vector

push_back() 添加

不能用下标添加元素

vector的类型总是包括元素的类型 如vector::szie_type

初始化

拷贝初始化= 只能停供一个值
类内初始值 只能使用拷贝初始化或者花括号形式
初始元素值的列表,只能使用花括号进行列表初始化,不能使用括号

括号初始化应该是类似 多态 调用函数进行初始化

迭代器

也可以理解为指针的封装
begin()返回第一个元素 end()返回尾元素下一个。若元素为空,则两者相同

只有string、vector等标准库类型有下标运算符,但是所有标准库容器的迭代器都定义了 == 和 !=,大多数都没定义<,所以一般使用 前者在for循环中

迭代器类型 iterator/const_iterator,一般使用auto

cbegin(),cend()一定会返回const_iterator,begin() end()视常量而定。

解引用 (*it).empty(),括号不可省略。或者可以使用箭头运算符->

vector 增长会使迭代器失效,也不能在for中增长。

部分迭代器定义了 difference_type的带符号整形数,来用作两迭代器相减。

数组

int *ptrs[10];//ptrs是一个含有10个整形指针的数组
int &refs[10] = ;//不存在引用数组
int (*Parray)[10] = &arr;//Parray指向一个含有10个整数的数组
int&arrRef)[10] = arr;//arrRef引用一个含有10个整数的数组
int *(&arry)[10] = ptrs;//arry是数组的引用,该数组含10个指针
//由内向外 由右向左读

size_t数组下标的类型,无符号。定义在cstddef中。
像迭代器一样,库函数begin(),end()可以获取首元素指针 尾元素指针。
两指针相减的结果是ptrdiff_t类型,定义在cstddef,带符号

标准库类型如string vector下标必须是无符号,而数组内置的下标运算可以处理负值

多维数组 for-each循环
for(auto &row:ia)
for(auto col:row)
count<<col;
无论是否修改,第一层都需使用引用。若不使用&row,则默认初始化为指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值