c++学习拾遗【一】
字符串
1.几个特殊的数据类型
string s(“Hello”);
s.size()==6 string::size_type (unsigned type)
s.size()==6 string::size_type (unsigned type)
int *p1,*p2;
ptrdiff_t n = p1 – p2; //指针的差
#include<cstddef>
ptrdiff_t (signed int)
ptrdiff_t n = p1 – p2; //指针的差
#include<cstddef>
ptrdiff_t (signed int)
vector 下标类型 vector::size_type
string 下标类型 string::size_type
数组下标类型 size_t
2.字符串与数组
string s1,s2=”Hello”;
s1 = s2; // 字符串可以直接赋值
int ia[] = {0, 1, 2};
int ia2[3];
ia2 = ia; //数组不可以
s1 = s2; // 字符串可以直接赋值
int ia[] = {0, 1, 2};
int ia2[3];
ia2 = ia; //数组不可以
3.动态数组
size_t n = get_size(); //允许动态分配空数组 get_size()运行时才知道值
int* p = new int[n];
string *psa = new string[10]; //string不是内置类型,分配了内存,初始化了元素
int *pia = new int[10]; //int是内置类型,分配了内存,不初始化元素 (所以const类型时则有错)
int *pia = new int[10](); // 强制要求编译器初始化
int* p = new int[n];
string *psa = new string[10]; //string不是内置类型,分配了内存,初始化了元素
int *pia = new int[10]; //int是内置类型,分配了内存,不初始化元素 (所以const类型时则有错)
int *pia = new int[10](); // 强制要求编译器初始化
4.C风格字符串
#include<cstdlib>
int *pi = NULL; // NULL是C 风格
int *pi = NULL; // NULL是C 风格
#incldue<cstring>
strlen(s) strcmp(s1,s2)….
char ca[] = {‘c’, ‘+’, ‘+’};
strlen(ca);//危险 strlen根据字符串结束符null来判断结尾
strlen(s) strcmp(s1,s2)….
char ca[] = {‘c’, ‘+’, ‘+’};
strlen(ca);//危险 strlen根据字符串结束符null来判断结尾
5.const与指针
C++强制要求指向const对象的指针也必须具有const特性,但允许把非const对象的地址赋给指向const对象的指针。
const double pi = 3.14;
double *ptr = π //错误
double dval = 3.14;
const double *cptr;
cptr = &dval //正确 所以可以个性const指针指向对象的值
double *ptr = π //错误
double dval = 3.14;
const double *cptr;
cptr = &dval //正确 所以可以个性const指针指向对象的值
6.自增操作区别
i ++; // 需要保存原来的i值
++ i; // 所做的工作更少
++ i; // 所做的工作更少
vector<int> ivec;
int cnt = 10;
while(cnt>0)
ivec.pust_back(cnt--);
vector<int>::iterator iter = ivec.begin();
while(iter != ivec.end())
cout << *iter++ <<endl; // *iter++ ó *(iter++)
int cnt = 10;
while(cnt>0)
ivec.pust_back(cnt--);
vector<int>::iterator iter = ivec.begin();
while(iter != ivec.end())
cout << *iter++ <<endl; // *iter++ ó *(iter++)
7.箭头操作符 ->
C++为在点操作符后使用的解引用操作定义的同义词.
(*p).foo; ó p->foo;
8.sizeof操作符
对数组进行sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数
int sz = sizeof(ia)/sizeof(*ia);//取数组元素个数