编程注意事项记录
发布时间
阅读量:
阅读量
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)
还没有任何评论哟~
