C/C++ basic

字面值:
u 定义为unsigned
l 定义为long
例:-12u 12l -12ul
科学计数:
ExF 或者ExLF x代表10的次方数
3.14E5F //314000
转义:
\num num可以是八进制\062,十六进制\xddd
字符串:
L代表宽字符 L'a' L"a"
多行字面值 \

定义引用:
把a的引用给b
int a=10;
int &b=a;
b++;//a,b都为11
和以下等价
int *b=&a;
(*b)++;

迭代器:
vector<int> v;
for(vector<int>::iterator itr=v.begin();itr!=v.end();itr++)
*irt=0;
只读迭代器
forvector<int>::const_iterator itr=v.begin();itr!=v.end();itr++)
cout<<*irt;

数组:
初始化: const unsigned array_size = 3;
int ia[array_size] = {0, 1, 2};
int ia[] = {0, 1, 2};
在函数体外定义的数组会默认初始化,函数体内定义的不会初始化,(如果是int,初始化会是1,不然会是不确定的数)
C++中建议使用vector,数组初始化vector方法是提供首地址和末地址后一个
vector<int> vi(ia,ia+3)

位操作:

unsigned int int_quiz1 = 0;
int_quiz1 |=1UL<<10;    //设置第10位为1
if(int_quiz1&(1UL<<10)) //判断第10位是否是1
    cout<<"10 true"<<endl;
int_quiz1 &=~(1UL<<10); //设置第10位为0
//C++中推荐使用bitset
bitset<13> b(int_quiz1);
b.set(10); 
b.reset(10);
cout<<b.to_string()<<endl;

机器相关数据类型:

ptrdiff_t 2个指针差signed,同一数组,不同数组可能会溢出
size_t usigned类型

字符串:
strncpy 的标准用法为:(手工写上 \0)

const char* cp1="1111111111111111111111"; //最好定义为const char*,因为字符串常量无法修改,尝试修改会报错 
const char* cp2="2222222222222222222222";
char largeStr[16 + 18 + 2]={0}; // 需要有初始化,不然strncat找不到\0标记,导致找不到字符串的末尾 
strncpy(largeStr, cp1, 16); 
strncat(largeStr, " ", 2); 
strncat(largeStr, cp2,17); // 至少保留一位,用于存放\0结束标记
largeStr[16 + 18+1]='\0';//添加字符串结束标记
cout<<largeStr; 

尽量使用strncat_s 带安全监测,溢出会报出异常,比如上面使用strncat(largeStr, cp2,19)会直接报错

原文地址:https://www.cnblogs.com/FlyCat/p/2810866.html