最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++11新特性全解析新的類功能、lambda、包裝器詳解

 更新時間:2026年02月28日 09:59:02   作者:keyipatience  
本文主要介紹了C++11中新增的移動語義、默認(rèn)函數(shù)、刪除函數(shù)、override和final關(guān)鍵字,以及STL中的新容器和接口、lambda表達(dá)式、function和bind函數(shù)模板,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

1.新的類功能

1.1默認(rèn)的移動構(gòu)造和移動賦值

• 原來C++類中,有6個默認(rèn)成員函數(shù):構(gòu)造函數(shù)/析構(gòu)函數(shù)/拷?構(gòu)造函數(shù)/拷?賦值重載/取地址重 載/const取地址重載,最后重要的是前4個,后兩個?處不?,默認(rèn)成員函數(shù)就是我們不寫編譯器 會?成?個默認(rèn)的。C++11新增了兩個默認(rèn)成員函數(shù),移動構(gòu)造函數(shù)和移動賦值運(yùn)算符重載。

 • 如果你沒有??實現(xiàn)移動構(gòu)造函數(shù),且沒有實現(xiàn)析構(gòu)函數(shù)、拷?構(gòu)造、拷?賦值重載中的任意? 個。那么編譯器會?動?成?個默認(rèn)移動構(gòu)造。默認(rèn)?成的移動構(gòu)造函數(shù),對于內(nèi)置類型成員會執(zhí) ?逐成員按字節(jié)拷?,?定義類型成員,則需要看這個成員是否實現(xiàn)移動構(gòu)造,如果實現(xiàn)了就調(diào)? 移動構(gòu)造,沒有實現(xiàn)就調(diào)?拷?構(gòu)造。

• 如果你沒有??實現(xiàn)移動賦值重載函數(shù),且沒有實現(xiàn)析構(gòu)函數(shù)、拷?構(gòu)造、拷?賦值重載中的任意 ?個,那么編譯器會?動?成?個默認(rèn)移動賦值。默認(rèn)?成的移動構(gòu)造函數(shù),對于內(nèi)置類型成員會 執(zhí)?逐成員按字節(jié)拷?,?定義類型成員,則需要看這個成員是否實現(xiàn)移動賦值,如果實現(xiàn)了就調(diào) ?移動賦值,沒有實現(xiàn)就調(diào)?拷?賦值。(默認(rèn)移動賦值跟上?移動構(gòu)造完全類似)

 如果你提供了移動構(gòu)造或者移動賦值,編譯器不會?動提供拷?構(gòu)造和拷?賦值。

1.2 default和delete

• C++11可以讓你更好的控制要使?的默認(rèn)函數(shù)。假設(shè)你要使?某個默認(rèn)的函數(shù),但是因為?些原因 這個函數(shù)沒有默認(rèn)?成。?如:我們提供了拷?構(gòu)造,就不會?成移動構(gòu)造了,那么我們可以使? default關(guān)鍵字顯?指定移動構(gòu)造?成。

 • 如果能想要限制某些默認(rèn)函數(shù)的?成,在C++98中,是該函數(shù)設(shè)置成private,并且只聲明補(bǔ)丁已, 這樣只要其他?想要調(diào)?就會報錯。在C++11中更簡單,只需在該函數(shù)聲明加上=delete即可該語 法指?編譯器不?成對應(yīng)函數(shù)的默認(rèn)版本,稱=delete修飾的函數(shù)為刪除函數(shù)。

1.3 override和final

override 用于明確表示一個方法是重寫父類的虛方法。它告訴編譯器該方法必須與父類中的某個虛方法簽名匹配,否則會報錯。主要用于避免拼寫錯誤或參數(shù)不一致導(dǎo)致的重寫失敗。

作用:確保派生類的方法正確重寫基類的虛方法

final 用于禁止派生類進(jìn)一步重寫某個方法,或禁止某個類被繼承。它可以修飾方法或類。
作用:
 修飾方法時:禁止派生類重寫該方法。
 修飾類時:禁止其他類繼承該類。

class Base {
public:
    virtual void foo() {}
};
class Derived : public Base {
public:
    void foo() override {} // 明確表示重寫
};
class Base
 {
public
:
    virtual void foo() final {} // 禁止重寫
};
class Derived : public
 Base {
public
:
    // void foo() {} // 錯誤:無法重寫 final 方法
};

2. STL中的一些變化

• 下圖1圈起來的就是STL中的新容器,但是實際最有?的是unordered_map和unordered_set。這 兩個我們前?已經(jīng)進(jìn)?了?常詳細(xì)的講解,其他的?家了解?下即可。

• STL中容器的新接?也不少,最重要的就是右值引?和移動語義相關(guān)的push/insert/emplace系列 接?和移動構(gòu)造和移動賦值,還有initializer_list版本的構(gòu)造等,這些前?都講過了,還有?些?關(guān) 痛癢的如cbegin/cend等需要時查查?檔即可。

3. lambda

3.1 lambda表達(dá)式語法

• lambda 表達(dá)式本質(zhì)是?個匿名函數(shù)對象,跟普通函數(shù)不同的是他可以定義在函數(shù)內(nèi)部。 lambda 表達(dá)式語法使?層??沒有類型,所以我們?般是?auto或者模板參數(shù)定義的對象去接 收 lambda 對象。

•lambda表達(dá)式的格式: [capture-list] (parameters)-> return type { function boby }

• [capture-list] :捕捉列表,該列表總是出現(xiàn)在 lambda 函數(shù)的開始位置,編譯器根據(jù)[]來 判斷接下來的代碼是否為 lambda 函數(shù),捕捉列表能夠捕捉上下?中的變量供 lambda 函數(shù)使 ?,捕捉列表可以傳值和傳引?捕捉,具體細(xì)節(jié)7.2中我們再細(xì)講。捕捉列表為空也不能省略。

 • (parameters) :參數(shù)列表,與普通函數(shù)的參數(shù)列表功能類似,如果不需要參數(shù)傳遞,則可以連 同()?起省略

• ->return type :返回值類型,?追蹤返回類型形式聲明函數(shù)的返回值類型,沒有返回值時此部分可省略?般返回值類型明確情況下,也可省略,由編譯器對返回類型進(jìn)?推導(dǎo)。

• {function boby} :函數(shù)體,函數(shù)體內(nèi)的實現(xiàn)跟普通函數(shù)完全類似,在該函數(shù)體內(nèi),除了可以使?其參數(shù)外,還可以使?所有捕獲到的變量,函數(shù)體為空也不能省略。

3.2捕捉列表

• lambda 表達(dá)式中默認(rèn)只能? lambda 函數(shù)體和參數(shù)中的變量,如果想?外層作?域中的變量就 需要進(jìn)?捕捉

• 第?種捕捉?式是在捕捉列表中顯?的傳值捕捉和傳引?捕捉,捕捉的多個變量?逗號分割。[x, y,&z]表?x和y值捕捉,z引?捕捉。

第?種捕捉?式是在捕捉列表中隱式捕捉,我們在捕捉列表寫?個=表?隱式值捕捉,在捕捉列表寫?個&表?隱式引?捕捉,這樣我們 lambda 表達(dá)式中?了那些變量,編譯器就會?動捕捉那些變量。

第三種捕捉?式是在捕捉列表中混合使?隱式捕捉和顯?捕捉。[=,&x]表?其他變量隱式值捕捉, x引?捕捉;[&,x,y]表?其他變量引?捕捉,x和y值捕捉。當(dāng)使?混合捕捉時,第?個元素必須是 &或=,并且&混合捕捉時,后?的捕捉變量必須是值捕捉,同理=混合捕捉時,后?的捕捉變量必 須是引?捕捉。

• lambda 表達(dá)式如果在函數(shù)局部域中,他可以捕捉 lambda 位置之前定義的變量,不能捕捉靜態(tài) 局部變量和全局變量,靜態(tài)局部變量和全局變量也不需要捕捉, lambda 表達(dá)式中可以直接使?。這也意味著 lambda 表達(dá)式如果定義在全局位置,捕捉列表必須為空。

• 默認(rèn)情況下,lambda 捕捉列表是被const修飾的也就是說傳值捕捉的過來的對象不能修改, mutable加在參數(shù)列表的后?可以取消其常量性,也就說使?該修飾符后,傳值捕捉的對象就可以 修改了,但是修改還是形參對象,不會影響實參。使?該修飾符后,參數(shù)列表不可省略(即使參數(shù)為空)。

int x = 0;
//捕捉列表必須為空,因為全局變量不用捕捉就可以使用,沒有可被捕捉的變量
auto func1 = []()
	{
		x++;
	};
int main()
{
	int a = 0, b = 1, c = 2, d = 3;
	//只能用當(dāng)前l(fā)ambda局部域和捕捉的對象和全局對象
	auto func1 = [a, &b]
		{
			//值捕捉的變量不能被修改,引用可以
			//a++報錯
			b++;
			int ret = a + b;
			return ret;
		};
	cout << func1() << endl;
	//隱式值捕捉,用了哪些捕哪些
	auto func2 = [=]
		{
			int ret = a + b + c;
			return ret;
		};
	cout << func2() << endl;
	auto func3 = [&]
		{
			a++;
			b++;
			c++;
		};
	func3();
	cout << a << " " << b << " " << c <<" "<<d << endl;
	auto func4 = [&, a, b]//混合捕捉,除了a,b其他的都引用捕捉
		{
			//a++;
			//b++;
			c++;
			d++;
			return a + b + c + d;
		};
	func4();
	cout << a << " " << b << " " << c << " " << d << endl;
	auto func5 = [=, &a, &b]//混合捕捉,除了a,b其他的都傳值捕捉
		{
			a++;
			b++;
			/*c++;
			d++;*/
			return a + b + c + d;
		};
	func5();
	cout << a << " " << b << " " << c << " " << d << endl;
	//局部的靜態(tài)變量和全局變量不能捕捉,也不用捕捉
	static int m = 0;
	auto func6 = []
		{
			int ret = x + m;
			return ret;
		};
	//傳值捕捉本身是一種拷貝,并且被const修飾
	//mutable相當(dāng)于去掉const修飾
	//但是修改了不會影響外面被捕的值,因為是一種拷貝
	auto func7 = [=]()mutable
		{
			a++;
			b++;
			c++;
			d++;
		};
	return 0;
}

3.3 lambda的應(yīng)用

• 在學(xué)習(xí) lambda 表達(dá)式之前,我們的使?的可調(diào)?對象只有函數(shù)指針和仿函數(shù)對象,函數(shù)指針的 類型定義起來?較?煩,仿函數(shù)要定義?個類,相對會?較?煩。使? lambda 去定義可調(diào)?對 象,既簡單??便。

• lambda 在很多其他地??起來也很好?。?如線程中定義線程的執(zhí)?函數(shù)邏輯,智能指針中定 制刪除器等, lambda 的應(yīng)?還是很?泛的,以后我們會不斷接觸到。

#include<algorithm>
struct Goods
{
	string _name;
	double _price;
	int _evaluate;
	Goods(const char* str, double price, int evaluate)
		:_name(str)
		,_price(price)
		,_evaluate(evaluate)
	{ }
};
struct comparepriceless
{
	bool operator()(const Goods& gl, const Goods& gr)
	{
		return gl._price < gr._price;
	}
};
struct comparepricegreater
{
	bool operator()(const Goods& gl, const Goods& gr)
	{
		return gl._price > gr._price;
	}
};
int main()
{
	vector<Goods>v = { {"蘋果",2.1,5},{"香蕉",3,4},{"橙子",2.2,3} };
	//類似這樣的場景,我們實現(xiàn)仿函數(shù)對象或者函數(shù)指針來比較,相對比較麻煩,那么用lambda就很好
	sort(v.begin(), v.end(), comparepriceless());
	sort(v.begin(), v.end(), comparepricegreater());
	sort(v.begin(), v.end(), [](const Goods& gl, const Goods& gr)
		{
			return gl._price < gr._price;
		});
	sort(v.begin(), v.end(), [](const Goods& gl, const Goods& gr)
		{
			return gl._price >gr._price;
		});
	sort(v.begin(), v.end(), [](const Goods& gl, const Goods& gr)
		{
			return gl._evaluate < gr._evaluate;
		});
	sort(v.begin(), v.end(), [](const Goods& gl, const Goods& gr)
		{
			return gl._evaluate > gr._evaluate;
		});
	return 0;
}

3.4 lambda的原理

• lambda 的原理和范圍for很像,編譯后從匯編指令層的?度看,壓根就沒有 lambda 和范圍for 這樣的東西。范圍for底層是迭代器,?lambda底層是仿函數(shù)對象,也就說我們寫了?個 lambda 以后,編譯器會?成?個對應(yīng)的仿函數(shù)的類。

• 仿函數(shù)的類名是編譯按?定規(guī)則?成的,保證不同的 lambda ?成的類名不同,lambda參數(shù)/返 回類型/函數(shù)體就是仿函數(shù)operator()的參數(shù)/返回類型/函數(shù)體, lambda 的捕捉列表本質(zhì)是?成的仿函數(shù)類的成員變量,也就是說捕捉列表的變量都是 lambda 類構(gòu)造函數(shù)的實參,當(dāng)然隱式捕 捉,編譯器要看使?哪些就傳那些對象。

• 上?的原理,我們可以透過匯編層了解?下,下?第?段匯編層代碼印證了上?的原理。

4.包裝器

4.1 function

template class T>

class function; // undefined

template <class Ret, class... Args>

class function<Ret(Args...)>;

• std::function 是?個類模板,也是?個包裝器。std::function 的實例對象可以包裝存 儲其他的可以調(diào)?對象,包括函數(shù)指針、仿函數(shù),lambda,bind 表達(dá)式等,存儲的可調(diào)?對 象被稱為std::function 的?標(biāo)。若std::function 不含?標(biāo),則稱它為空。調(diào)?空std::function 的?標(biāo)導(dǎo)致拋出std::bad_function_call異常。

• 以上是 function 的原型,他被定義頭?件中。std::function-cppreference.com 是function的官??件鏈接。

 • 函數(shù)指針、仿函數(shù),lambda 等可調(diào)?對象的類型各不相同,std::function 的優(yōu)勢就是統(tǒng) ?類型,對他們都可以進(jìn)?包裝,這樣在很多地?就?便聲明可調(diào)?對象的類型。

#include<functional>
int f(int a, int b)
{
	return a + b;
}
struct Functor
{
public:
	int operator()(int a, int b)
	{
		return a + b;
	}
};
class Plus
{
public:
	Plus(int n = 10)
		:_n(n)
	{ }
	static int plusi(int a, int b)
	{
		return a + b;
	}
	double plusd(double a, double b)
	{
		return (a + b) * _n;
	}
private:
	int _n;
};
int main()
{
	function<int(int, int)>f1 = f;
	function<int(int, int)>f2 = Functor();
	function<int(int, int)>f3 = [](int a, int b) {return a + b; };
	cout << f1(1, 1) << endl;
	cout << f2(1, 1) << endl;
	cout << f3(1, 1) << endl;
	//包裝靜態(tài)成員函數(shù)
	//成員函數(shù)要指定類域且前面加&才能獲得地址
	function<int(int, int)>f4 = &Plus::plusi;
	cout << f4(1, 1) << endl;
	//包裝普通成員函數(shù)
	//普通成員函數(shù)還有一個隱含的this指針參數(shù),所以綁定時傳對象的指針或者對象都o(jì)k
	function<double(Plus*, double, double)>f5 = &Plus::plusd;
	Plus pd;
	cout << f5(&pd, 1.1, 1.1) << endl;
	function<double(Plus, double, double)>f6 = &Plus::plusd;
	cout << f6(pd, 1.1, 1.1) << endl;
	cout << f6(Plus(), 1.1, 1.1) << endl;//匿名對象,不用再定義pd對象
	function<double(Plus&&, double, double)>f7 = &Plus::plusd;
	cout << f6(move(pd), 1.1, 1.1) << endl;
	cout << f6(Plus(), 1.1, 1.1) << endl;//匿名對象.匹配右值引用
	return 0;
}

下?的這個代碼樣例展示了 std::function 作為map的參數(shù),實現(xiàn)字符串和可調(diào)?對象的映射表功能。

https://leetcode.cn/problems/evaluate-reverse-polish-notation  逆波蘭表達(dá)式

class Solution {
public:
    int evalRPN(vector<string>& tokens) 
    {
        // stack<int>s;
        // for(auto e:tokens)
        // {
        //     if(e=="+"||e=="-"||e=="*"||e=="/")
        //     {
        //         int right=s.top();
        //         s.pop();
        //         int left=s.top();
        //         s.pop();
        //         if(e=="+")s.push(left+right);
        //         if(e=="-")s.push(left-right);
        //         if(e=="*")s.push(left*right);
        //         if(e=="/")s.push(left/right);
        //     }
        //     else
        //     {
        //         s.push(stoi(e));
        //     }
        // }
        // return s.top();
//法2:
        stack<int>s;
        map<string,function<int(int,int)>>opfunmap={
        {"+",[](int x,int y){return x+y;}},
        {"-",[](int x,int y){return x-y;}},
        {"*",[](int x,int y){return x*y;}},
        {"/",[](int x,int y){return x/y;}}
        };
        for(auto e:tokens)
        {
            if(opfunmap.count(e))
            {
                int r=s.top();
                s.pop();
                int l=s.top();
                s.pop();
               int ret= opfunmap[e](l,r);
               s.push(ret);
            }
            else{
                s.push(stoi(e));
            }
        }
        return s.top();
    }
};

4.2 bind

bind 是?個函數(shù)模板,它也是?個可調(diào)?對象的包裝器,可以把他看做?個函數(shù)適配器,對接收 的fn可調(diào)?對象進(jìn)?處理后返回?個可調(diào)?對象。 bind 可以?來調(diào)整參數(shù)個數(shù)和參數(shù)順序。 bind 也在這個頭?件中。

• 調(diào)?bind的?般形式: auto newCallable = bind(callable,arg_list); 其中 newCallable本?是?個可調(diào)?對象,arg_list是?個逗號分隔的參數(shù)列表,對應(yīng)給定的callable的 參數(shù)。當(dāng)我們調(diào)?newCallable時,newCallable會調(diào)?callable,并傳給它arg_list中的參數(shù)。

• arg_list中的參數(shù)可能包含形如_n的名字,其中n是?個整數(shù),這些參數(shù)是占位符,表示 newCallable的參數(shù),它們占據(jù)了傳遞給newCallable的參數(shù)的位置。數(shù)值n表??成的可調(diào)?對象 中參數(shù)的位置:_1為newCallable的第?個參數(shù),_2為第?個參數(shù),以此類推。_1/_2/_3....這些占 位符放到placeholders的?個命名空間中。

#include<functional>
using placeholders::_1;
using placeholders::_2;
using placeholders::_3;
int Sub(int a, int b)
{
	return (a - b) * 10;
}
int Subx(int a, int b,int c)
{
	return (a - b-c) * 10;
}
class Plus
{
public:
	static int plusi(int a, int b)
	{
		return a + b;
	}
	double plusd(double a, double b)
	{
		return a + b;
	}
};
int main()
{
	auto sub1 = bind(Sub, _1, _2);
	cout << sub1(10, 5) << endl;//輸出50
	// bind 本質(zhì)返回的?個仿函數(shù)對象 
    // 調(diào)整參數(shù)順序(不常?) 
    // _1代表第?個實參 
    // _2代表第?個實參 
    // ...
	//function<int(int, int)>f1 = bind(Sub, _1, _2);
	auto sub2 = bind(Sub, _2, _1);
	cout << sub2(10, 5) << endl;//輸出-50
	//調(diào)整參數(shù)個數(shù)(常用)
	auto sub3 = bind(Sub, 100, _1);
	cout << sub3(5) << endl;//綁死了a=100;
	auto sub4 = bind(Sub, _1, 100);
	cout << sub4(5) << endl;//綁死了b=100
	//分別綁死第123個參數(shù)
	auto sub5 = bind(Subx, 100, _1, _2);
	auto sub6= bind(Subx, _1, 100, _2);
	auto sub6 = bind(Subx, _1, _2,100);
	//成員函數(shù)對象繼續(xù)綁定,就不用每次傳了
	function<double(Plus&&, double, double)>f6 = &Plus::plusd;
	Plus pd;
	cout << f6(move(pd), 1.1, 1.1) << endl;
	cout << f6(Plus(), 1.1, 1.1) << endl;//匿名對象.匹配右值引用
	//bind直接綁死
	function<double( double, double)>f7 = bind(&Plus::plusd, Plus(), _1, _2);
	auto fun = [](double rate, double money, int year)
		{
			double ret = money;
			for (int i = 0; i < year; i++)
			{
				ret = ret * rate + ret;
			}
			return ret - money;
		};
	function<double(double)>f1 = bind(fun, 0.015, _1, 3);
	function<double(double)>f2 = bind(fun, 0.015, _1, 5);
	//....
	return 0;
}

到此這篇關(guān)于C++11新特性全解析新的類功能、lambda、包裝器詳解的文章就介紹到這了,更多相關(guān)C++11 lambda、包裝器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS2010 C++ 配置優(yōu)化方案

    VS2010 C++ 配置優(yōu)化方案

    使用VS2010的時候,發(fā)現(xiàn)了不少問題,而本文則是介紹使用中需要的問題,已經(jīng)解決方案。
    2014-10-10
  • C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對象模型)

    C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對象模型)

    這篇文章主要介紹了C++中的繼承問題(繼承基本概念、菱形虛擬繼承的對象模型),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C++中單鏈表的建立與基本操作

    C++中單鏈表的建立與基本操作

    以下是對C++中單鏈表的建立與基本操作進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • c++中的malloc底層實現(xiàn)代碼

    c++中的malloc底層實現(xiàn)代碼

    這篇文章主要介紹了c++中的malloc底層實現(xiàn)代碼,包括malloc底層實現(xiàn)原理解析,內(nèi)存池的相關(guān)知識,需要的朋友可以參考下
    2021-07-07
  • C++進(jìn)程共享數(shù)據(jù)封裝成類實例

    C++進(jìn)程共享數(shù)據(jù)封裝成類實例

    這篇文章主要介紹了C++進(jìn)程共享數(shù)據(jù)封裝成類的方法,以實例形式講述了其封裝代碼與具體用法,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • 解析C++編程中virtual聲明的虛函數(shù)以及單個繼承

    解析C++編程中virtual聲明的虛函數(shù)以及單個繼承

    這篇文章主要介紹了C++編程中virtual聲明的虛函數(shù)以及單個繼承,剖析虛函數(shù)和單個基類所能夠繼承的成員,要的朋友可以參考下
    2016-01-01
  • C/C++中*和&的用法詳解

    C/C++中*和&的用法詳解

    在本篇文章中我們給大家總結(jié)了C/C++中*和&的用法以及相關(guān)的代碼分享,有興趣的朋友趕緊學(xué)習(xí)下吧。
    2018-03-03
  • 用C++編寫擴(kuò)展node.js(node-ffi版)

    用C++編寫擴(kuò)展node.js(node-ffi版)

    今天小編就為大家分享一篇關(guān)于用C++編寫擴(kuò)展node.js(node-ffi版),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 詳解C++虛函數(shù)表存儲位置

    詳解C++虛函數(shù)表存儲位置

    相信大家知道虛表指針和虛函數(shù)存儲的位置,但對于虛函數(shù)表的存儲位置一時無法確定。本文就來和大家詳細(xì)聊聊相關(guān)內(nèi)容,希望對大家有所幫助
    2023-04-04
  • C語言拓展實現(xiàn)Lua sleep函數(shù)

    C語言拓展實現(xiàn)Lua sleep函數(shù)

    這篇文章主要介紹了C語言拓展實現(xiàn)Lua sleep函數(shù),本文使用C語言寫出sleep函數(shù),編譯后在Lua中調(diào)用,需要的朋友可以參考下
    2015-04-04

最新評論

滦平县| 遂宁市| 昌邑市| 砀山县| 辽阳市| 吕梁市| 天台县| 景东| 昭通市| 黎城县| 阿拉善盟| 石家庄市| 修文县| 伊金霍洛旗| 汉中市| 广安市| 松原市| 武隆县| 平山县| 泰来县| 盐源县| 离岛区| 东山县| 乐业县| 武山县| 邹城市| 吉木乃县| 江城| 韩城市| 青神县| 漳浦县| 墨江| 宝兴县| 汪清县| 西和县| 华阴市| 全州县| 涞水县| 内乡县| 安徽省| 大理市|