プログラミング上の注意事項の記録
1.並べ替え比較用の関数をstatic型関数として定義する
2.C++では、クラスの静的メンバー(static member)はクラス内で宣言し、クラス外で初期化する必要があります.
3.vectorがeraseメソッドを呼び出すと、反復器が無効になる(削除された反復器だけでなく、削除された要素の後のすべての反復器が無効になるため、erase(it++)方式は使用できない)が、このメソッドの戻り値は次の要素の反復器であるため、eraseメソッドを呼び出すコードの書き方は以下の通りである.
Insert法にも反復器のような失効の問題がある.
4.const char*、string、char*の変換
(1)string回転const char*
(2)const char*stringを回し、直接値を付与すればよい
(3)string回転char*
(4)char*回転string
(5)const char*回転char*
(6)char*はconst char*を回し、直接値を付与すればよい
5.C/C++assert()関数の使い方
assertの役割は、式expressionを先に計算し、値が偽(すなわち0)の場合、stderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了することです.
static bool comp(const vector &a, const vector &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++)方式は使用できない)が、このメソッドの戻り値は次の要素の反復器であるため、eraseメソッドを呼び出すコードの書き方は以下の通りである.
vector::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
void assert( int expression );
assertの役割は、式expressionを先に計算し、値が偽(すなわち0)の場合、stderrにエラー情報を印刷し、abortを呼び出してプログラムの実行を終了することです.