《STLソース剖析》学习--1.9--あなたを困惑させるかもしれないC++文法2


下一篇请见你困惑するかもしれないC++文法1
今から続けて、
2.仮の対象の発生と運用
一時的なオブジェクトは、無名のオブジェクトです.一時オブジェクトを作成する方法は、カテゴリの後にカッコを1対付け、初期値を指定することで、応答のconstructorを呼び出すことができます.stlでは、プログラムをきれいに見せるために、シミュレーション関数とともに使用されることが多い.
template <typename T>
class print{
public:
	void operator(){const T& elem){
		cout << elem << ' ';
	}
};

int main(){
	int ia[6] = {0,1,2,3,4,5};
	vector<int> iv(ia,ia+6);
	
	for_each(iv.begin().iv.end(),print<int>());
}

3.静的メンバー初期化の問題
静的非constメンバー初期化は、クラス定義内で宣言され、クラス外定義時に初期値を設定して初期化されます.
静的constメンバーは初期化され、クラス定義内で直接初期化されます.
4.自増自減の前置と後置
C++では++と--を用い,オブジェクトの前面または背面に現れることに応じて呼び出す.実は関数リロードに基づいて実現され、コンパイラが++aを見るとoperator+(a)が呼び出され、a++を見るとoperator(a,int)が呼び出される.ここでコンパイラはintにダミー定数値を渡し(この値は永遠に使用されないため)、接尾辞に異なるタグを生成するために使用します.
使用例は、クラスTにおけるコードである.
//prefix: increment and then fetch
T& operate++(){
    ++(this->i);//       ,  T     
	return *this;
}
//postfix: fetch and then increment
const T operator++(int){
	T temp = *this;
	++(*this);
	return temp;
}

5.stl中区間表示[)
区間は前閉後開の表示方法を採用している.[first,last],含まれる元素範囲は[first,last-1)である.
6.擬似関数
シミュレーション関数は、類似関数の構造体またはクラスです.あるクラスをシミュレーション関数として使用するには、クラスがoperator()リロードされなければなりません.これは関数を使用するように使用できます.
ここにも7章の内容を加えて,擬似関数を記録する.
多くのstlアルゴリズムは2つのバージョンを提供し、1つは一般的な状況であり、1つは特殊な状況である.特殊な状況では、ユーザが条件またはポリシーを指定する必要があり、条件またはポリシーの背後には一連の操作で構成されている.
stlでは、この一連の操作がシミュレーション関数を指す.一般的な関数は,パラメータとして伝達されると,関数ポインタのみを通過するが,ポインタは自分の状態だけではなく,さらに重要なのは関数ポインタがstlの抽象性に対する要求を満たすことができないため,stlコンポーネントの適合性に達しないことである.
シミュレーション関数は、関数パラメータに基づいて、それぞれ1元シミュレーション関数(unary_function)と2元シミュレーション関数(binary_function)とすることができ、ユーザー定義シミュレーション関数の1つを継承する必要があります.
次は、一元シミュレーション関数のパラメータタイプと戻り値タイプです.二元シミュレーション関数は似ています.
template <class Arg, class Result>
struct unary_function{
	typedef Arg argument_type;
	typedef Result result_type;
}

機能によって算術類(Arithmetic)シミュレーション関数、関係演算類(Rational)シミュレーション関数、論理演算類(Logical)シミュレーション関数に分けられ、これらのシミュレーション関数も一元または二元シミュレーション関数から継承される.
いくつかの概念を明らかにしなければなりません
証同要素、いわゆる“opを演算する証同要素”、つまり数値はある要素とop演算をして、自分を得ることができて、その要素はその演算子の証同要素です.
同じ関数で、この関数を通過した数値は何も変わりません.
関数を選択し、pairを受け入れ、最初の値または2番目の値を返します.
投影関数は、パラメータを返し、別のパラメータを無視します.