Advertisement

编程注意事项记录

阅读量:

1. 用于排序比较的函数定义成static类型函数

复制代码
 static bool comp(const vector<int> &a, const vector<int> &b) 

    
 {
    
     return a[0] < b[0];
    
 }
    
    
    
    
    代码解读

2. 在C++中,类的静态成员(static member)必须在类内声明,在类外初始化

复制代码
 class A

    
 { 
    
 private: 
    
 static int count ; // 类内声明 
    
 };
    
  
    
 // 类外定义并初始化,不必再加static关键字
    
 int A::count = 0 ;
    
    
    
    
    代码解读

3. 当vector调用erase函数时(因为调用方式为erase(it++)的关系),这会导致当前及后续所有iterator都变得无效(具体而言是指指向即将被删除元素的那个iterator以及后续所有iterator都会失效)。然而,在这种情况下(即当使用it++作为参数时),尽管操作可行但存在风险性的问题在于无法访问修改后的位置信息;因此,在实际应用中应当避免使用这种关系型iterator来进行操作(如erase函数)。相反地,在这种情形下(it++作为参数),该函数会返回下一个有效的iterator位置(即it+1的位置)。因此,在编写相关代码时需要注意遵循正确的usage guidelines.

复制代码
 vector<int>::iterator v = vector_int.begin();

    
 while(v != vector_int.end())
    
 {
    
     if(*v == 3)
    
     {
    
         v = vector_int.erase(v);
    
         cout << *v << endl;
    
     }
    
     else{
    
         v++;
    
     }
    
 }
    
    
    
    
    代码解读

insert方法也有类似迭代器失效的问题。

4. const char*、string和char*的转换

(1)string转const char*

复制代码
 string s = “abc”;

    
 const char* c_s = s.c_str();
    
    
    
    
    代码解读

(2)const char* 转string,直接赋值即可

复制代码
 const char* c_s = “abc”;

    
 string s(c_s);
    
    
    
    
    代码解读

(3)string 转char*

复制代码
 string s = “abc”;

    
 char* c; 
    
 const int len = s.length(); 
    
 c = new char[len+1]; 
    
 strcpy(c,s.c_str());
    
    
    
    
    代码解读

(4)char* 转string

复制代码
 char* c = “abc”;

    
 string s(c);
    
    
    
    
    代码解读

(5)const char* 转char*

复制代码
 const char* cpc = “abc”;

    
 char* pc = new char[strlen(cpc)+1]; 
    
 strcpy(pc,cpc);
    
    
    
    
    代码解读

(6)char* 转const char*,直接赋值即可

复制代码
 char* pc = “abc”;

    
 const char* cpc = pc;
    
    
    
    
    代码解读

5. C/C++ assert()函数用法

复制代码
 #include <assert.h>

    
 void assert( int expression );
    
    
    
    
    代码解读

当计算表达式expression时(其中结果若为假即0),assert会首先向标准错误日志输出一条错误提示信息,并随后调用abort函数来终止程序的运行。

全部评论 (0)

还没有任何评论哟~