c++学习拾遗【一】

字符串

1.几个特殊的数据类型

 

string s(“Hello”);
s.size()
==6   string::size_type (unsigned type)

 

 

int *p1,*p2;
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[] = {012}; 
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]();      // 强制要求编译器初始化

 

 

4.C风格字符串

#include<cstdlib> 
int *pi = NULL;  // NULL是C 风格

 

 

#incldue<cstring>
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 = &pi; //错误
 
double dval = 3.14;
const double *cptr;
cptr 
= &dval //正确 所以可以个性const指针指向对象的值

 

  

6.自增操作区别

++// 需要保存原来的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++)

 

 

7.箭头操作符 ->

C++为在点操作符后使用的解引用操作定义的同义词.

(*p).foo;  ó   p->foo;

 

8.sizeof操作符

对数组进行sizeof操作等效于将对其元素类型做sizeof操作的结果乘上数组元素的个数

int sz = sizeof(ia)/sizeof(*ia);//取数组元素个数 

 

posted on 2011-04-13 21:27    阅读(265)  评论(0编辑  收藏  举报

导航