日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ boost 实例学习

發布時間:2025/4/14 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ boost 实例学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

boost生成和解析json的完整例子

http://blog.csdn.net/dotphoenix/article/details/27081377

// // json_parser.h // mongoose // // Created by Alex on 5/26/14. // Copyright (c) 2014 Cenbong. All rights reserved. // #ifndef __mongoose__json_parser__ #define __mongoose__json_parser__ #include <string> #include <sstream> #include <vector> class sms_info { sms_info() { index_ = 0; } public: static std::string INDEX; static std::string TO; static std::string FROM; static std::string MSG; static std::string SPLITTER; static std::string TAG; private: int index_; std::string to_; std::string from_; std::string msg_; public: sms_info(int index, const std::string& to, const std::string& from, const std::string& msg) { index_ = index; to_ = to; from_ = from; msg_ = msg; } int index() { return index_; } std::string to() { return to_; } std::string from() { return from_; } std::string msg() { return msg_; } }; class json_parser { private: static std::string ROOTNAME; public: static std::string generate(const std::vector<sms_info>& smss); static bool parse(const std::string& s, std::vector<sms_info>& smss); public: static void tester(); }; #endif /* defined(__mongoose__json_parser__) */ // // json_parser.cpp // mongoose // // Created by Alex on 5/26/14. // Copyright (c) 2014 Cenbong. All rights reserved. // #include "json_parser.h" #include <boost/progress.hpp> #include "sstream" #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/json_parser.hpp> #include <boost/property_tree/xml_parser.hpp> #include <boost/typeof/typeof.hpp> #include <boost/foreach.hpp> std::string sms_info::INDEX = "index"; std::string sms_info::TO = "to"; std::string sms_info::FROM = "from"; std::string sms_info::MSG = "msg"; std::string sms_info::SPLITTER = ","; std::string sms_info::TAG = "SMSInfo"; std::string json_parser::ROOTNAME = "smss"; void json_parser::tester() { std::vector<sms_info> smss1; for(int i = 0; i < 5; i++) { int index = i; std::string to = "1860000" ; std::string from = "1880000" ; std::string msg = "這個短信發給Alex, 謝謝。 "; smss1.push_back(sms_info(index, to, from, msg)); } std::string s = generate(smss1); std::vector<sms_info> smss2; parse(s, smss2); assert(smss1.size() == smss2.size()); } std::string json_parser::generate(const std::vector<sms_info>& smss) { boost::property_tree::ptree pt_root; boost::property_tree::ptree children; boost::property_tree::ptree child; for(size_t i = 0; i < smss.size(); i++) { sms_info sms = smss.at(i); child.put(sms_info::INDEX, sms.index()); child.put(sms_info::TO, sms.to()); child.put(sms_info::FROM, sms.from()); child.put(sms_info::MSG, sms.msg()); children.push_back(std::make_pair("", child)); } pt_root.add_child(ROOTNAME, children); std::stringstream ss; boost::property_tree::write_json(ss, pt_root); std::string s = ss.str(); return s; } bool json_parser::parse(const std::string& s, std::vector<sms_info>& smss) { std::istringstream iss; iss.str(s.c_str()); boost::property_tree::ptree parser; boost::property_tree::json_parser::read_json(iss, parser); boost::property_tree::ptree sms_array = parser.get_child(ROOTNAME); BOOST_FOREACH(boost::property_tree::ptree::value_type &v, sms_array) { boost::property_tree::ptree p = v.second; int index = p.get<int>(sms_info::INDEX); std::string to = p.get<std::string>(sms_info::TO); std::string from = p.get<std::string>(sms_info::FROM); std::string msg = p.get<std::string>(sms_info::MSG); smss.push_back(sms_info(index, to, from, msg)); } return true; }
??
========

C++ 之Boost 實用工具類及簡單使用

http://www.cnblogs.com/kunhu/p/3681275.html


本文將介紹幾個 Boost 實用工具類,包括 tuple、static_assert、pool、random 和 program_options
等等。需要對標準 STL 具備一定的了解才能充分理解本文的內容。
1.boost::tuple 類
有時,希望 C++ 函數返回多個不相關的值。在推出 STL 之前,實現此目的的方法是創建所有不相關變
量的結構,并以指針或引用的形式返回它們或作為參數傳遞給函數——但是任一種方法都不是表達程序
員意圖的方法。STL引入了 pair,可將其用于聚合不相關的數據部分,但它一次只能處理兩個數據對象
。為了使用 int、 char 和 float 的元組(tuple ),可以按如下方式返回 pair:
make_pair<int, pair<char, float> > (3, make_pair<char, float> ('a', 0.9));
隨著您添加更多的元素,創建元組結構將變得越來越困難。Boost tuple 類型派上了用場。要使用?
boost::tuple,必須包括頭文件 tuple.hpp。要執行元組比較和組 I/O,您需要分別包括?
tuple_comparison.hpp 和tuple_io.hpp。
第一個使用元組的程序
清單 1 使用 int、char 和 float 的元組并打印內容。

清單 1. 創建 Boost 元組并打印內容

#include <iostream>

#include <tuple.hpp> #include <tuple_comparison.hpp> #include <tuple_io.hpp> using namespace boost; int main ( ) {tuple<int, char, float> t(2, 'a', 0.9);std::cout << t << std::endl;return 0; }

此代碼的輸出為 (2 a 0.9)。請注意,<< 運算符重載 std::ostream,以便通過轉儲每個單獨的 tuple?

元素來輸出元組。
與元組相關的重要事實
在使用元組時,務必牢記以下事實:
能夠形成元組的元素數量目前僅限于 10 個。
元組可以包含用戶定義的類類型,但是您必須負責確保那些類已經定義了正確的構造函數和拷貝構造函
數 (copy constructor)。清單 2 顯示了產生編譯時錯誤的代碼部分,因為該拷貝構造函數是私有的。

清單 2. 用于元組的類必須具有正確的拷貝構造函數

#include <tuple.hpp>

#include <tuple_comparison.hpp> #include <tuple_io.hpp> #include <iostream> using namespace std; class X{int x;X(const X& u) { x = u.x; }public:X(int y=5) : x(y) { } };int main ( ) {boost::tuple<int, X> t(3, X(2));return 0; }


與 STL 提供的 make_pair 函數非常類似,Boost 提供了 make_tuple 例程。要從函數返回元組,您必
須調用make_tuple。可以創建具有臨時元素的元組;清單 3 的輸出為 (4 0)。

清單 3.使用 make_tuple 來從函數返回元組


#include <tuple.hpp> #include <tuple_comparison.hpp> #include <tuple_io.hpp> #include <iostream> using namespace std; boost::tuple<int, int> divide_and_modulo(int a, int b) {return boost::make_tuple<int, int> (a/b, a%b); }int main ( ) {boost::tuple<int, int> t = divide_and_modulo(8, 2);cout << t << endl;return 0; }

要訪問元組的各個元素,您可以使用 get 例程。此例程具有兩種變體,如清單 4 所示。請注意,還可

以使用 get 例程來設置元組的各個元素,雖然有些編譯器可能不支持此功能。

清單 4. 使用 boost::get 例程

#include <tuple.hpp> #include <tuple_comparison.hpp> #include <tuple_io.hpp> #include <iostream> using namespace std; boost::tuple<int, int> divide_and_modulo(int a, int b) {return boost::make_tuple<int, int> (a/b, a%b); }int main ( ) {boost::tuple<int, int> t = divide_and_modulo(8, 2);cout << t.get<0> () << endl; // prints 4cout << boost::get<1>(t) << endl; // prints 0boost::get<0>(t) = 9; // resets element 0 of t to 9++boost::get<0>(t);  // increments element 0 of tcout << t.get<1>() << endl; // prints 10return 0; }

可以使用 const 限定符來聲明元組,在這種情況下,用于訪問特定元素的 get 調用將返回對 const 的

引用。不能對以這種方式訪問的元素進行賦值(請參見清單 5)。

清單 5. 使用 const 限定符來聲明的元組不可修改


#include <tuple.hpp> #include <tuple_comparison.hpp> #include <tuple_io.hpp> #include <iostream> using namespace std; int main ( ) {const boost::tuple<int, char*> t(8, "Hello World!");t.get<1> ()[0] = "Y"; // error!boost::get<0>(t) = 9; // error!return 0; }

可以使用關系運算符 ==、!=、<、>、<= 和 >= 對相同長度的元組進行比較。比較不同長度的元組會產

生編譯時錯誤。這些運算符的工作原理是從左到右地比較兩個參與元組的每個單獨的元素(請參見清單?

6)。

清單 6. 關系運算符與元組


#include <tuple.hpp> #include <tuple_comparison.hpp> #include <tuple_io.hpp> #include <iostream> #include <string> using namespace std; int main ( ) {boost::tuple<int, string> t(8, string ("Hello World!"));boost::tuple<int, string> t2(8, string("Hello World!"));cout << (t == t2) << endl;boost::tuple<int, string> r(9, string ("Hello World!"));boost::tuple<int, string> r2(8, string("Hello World!"));cout << (r > r2) << endl;boost::tuple<string, string> q(string ("AA"), string("BB"));boost::tuple<string, string> q2(string("AA"), string ("CC"));cout << (q < q2) << endl;return 0; }

清單 6 的輸出為 1 1 1。請注意,如果您不是使用 string 或 int,而是使用沒有定義 ==、!= 等運算

符的用戶定義的隨機類,則會產生編譯錯誤。
2.Boost 靜態斷言
斷言是 C/C++ 中的防錯性程序設計的一部分。最常見的用法如下:
assert(<some expression you expect to be true at this point in code>);
assert 例程僅在調試模式下有效。在發布模式下,通常使用預處理器宏 ¨CDNDEBUG 來編譯代碼,其效
果相當于assert 不存在。靜態斷言建立在這個基本概念之上,只不過靜態斷言僅在編譯時有效。此外,
靜態斷言不生成任何代碼。
例如,假設您在一個整型變量中執行某個位操作,并預期其大小為 4:這并非在所有操作系統平臺上都
是如此(請參見清單 7)。

清單 7. 使用 Boost 靜態斷言來驗證變量的大小


#include <boost/static_assert.hpp> int main ( ) {BOOST_STATIC_ASSERT(sizeof(int) == 4);// … other code goes herereturn 0;}

要使用 BOOST_STATIC_ASSERT 宏,您必須包括 static_assert.hpp 頭文件。不需要諸如 DNDEBUG 等特

定于編譯器的選項,并且您不需要向鏈接器提供庫——單憑該頭文件就足夠了。
如果斷言有效,則代碼將順利編譯。但是如果該假設無效,在某些 64 位平臺上就可能是如此,則編譯
器將生成錯誤消息并停止。使用 g++-3.4.4 進行編譯時的典型消息如下:
assert.cc: In function `int main()':
assert.cc:8: error: incomplete type `boost::STATIC_ASSERTION_FAILURE< false>'
  used in nested name specifier
這肯定不是最詳細的錯誤消息,但是它指出了具有錯誤假設的函數和確切行號。
下面是一些典型的現實情景,您應該在其中考慮使用靜態斷言:
靜態聲明的數組的邊界檢查
驗證原始和用戶定義的變量的大小
允許模板類或函數僅使用某些數據類型來進行實例化
Boost 靜態斷言的行為
您可以在類、函數或命名空間范圍中使用 Boost 靜態斷言;還可以與模板一起使用它們。清單 8 中的

示例闡明了概念。


清單 8. 使用 Boost 靜態斷言來限制類實例化

#include <iostream> #include <static_assert.hpp> using namespace std; using namespace boost;template<class T> class A {private:T x, y;BOOST_STATIC_ASSERT(numeric_limits<T>::is_signed);public:A(T x1, T y1) : x(x1), y(y1) { } };int main ( ) {A<unsigned long> a(2, 1);return 0; }

在清單 8 中,僅當 T 有符號時,模板類 A 才能進行實例化。類 numeric_limits 是標準命名空間的一
部分;它檢查基本類型在給定操作系統平臺上的屬性。在無符號(unsigned )的 long 類型的情況下,
專用變體numeric_limits<unsigned int> 的 is_signed 標志為 false。當您在類范圍中使用?

BOOST_STATIC_ASSERT時,它是私有的、受保護的還是公開的并不重要。

清單 9 將 BOOST_STATIC_ASSERT 與函數結合在一起使用。該代碼確保在函數 f1 中處理的類型只能是?

A 類型或其派生類型。通過使用 Boost 的靜態斷言宏和 is_convertible 例程(在

boost/type_traits/is_convertible.hpp 中定義),此代碼確保不希望的類型不會最終調用此例程。

清單 9. 將函數限制為僅處理特定的數據類型

#include <iostream> #include <static_assert.hpp> #include <boost/type_traits/is_convertible.hpp> using namespace std; using namespace boost; struct A {int a;float b; }; struct B : public A{ }; template <typename T> int f1 (T y) {BOOST_STATIC_ASSERT ((is_convertible<T, A*>::value));return 0; }int main ( ) {f1<B*> (new B);return 0; }

3.使用 Boost 庫生成隨機數
隨機數生成用于各種各樣的計算機應用,例如安全和游戲。UNIX 系統一般附帶了隨機數生成例程 rand?
和 srand。通常,srand 使用新的種子值來初始化 rand(請參見清單 10)。

清單 10. 用于在傳統 UNIX 中生成隨機數的代碼


#include <stdlib.h> #include <stdio.h> int main ( ) {srand(time(NULL)); // this introduces randomnessfor (int i=0; i<10; i++)printf("%d\n", rand());return 0; }


rand 例程返回一個介于 0 和 stdlib.h 中定義的 RAND_MAX 之間的數字。要了解 srand 所做的工作,
可以在將srand 例程注釋掉的情況下編譯清單 11。當您這樣做時,您將觀察到 rand 并不真正是隨機的
——可執行代碼每次打印同一組值。為了在代碼中引入隨機性,您可以使用 srand,此例程使用種子值
來初始化 rand。由于每次調用程序時的時間值是不同的,因此對于不同的調用,代碼打印的值不同。
使用 Boost 隨機數生成器
Boost 隨機數生成器位于 boost/random 文件夾中。此外,為方便起見,boost/ 目錄中的 random.hpp?
頭文件包括了 boost/random 文件夾中的所有其他頭文件。
Boost 隨機接口劃分為兩個部分:隨機數生成器和隨機數必須位于其中的分布。本文討論 uniform_int?
和uniform_real random-number 分布以及 mt19937 隨機數生成器。清單 11 使用了 uniform_int 和

uniform_real 分布。


清單 11. 將 variate_generator 與 mt19937 引擎和 uniform_int 分布一起使用


#include <iostream> #include <boost/random.hpp> using namespace std; using namespace boost; int main ( ) {uniform_int<> distribution (1, 100) ;mt19937 engine ;variate_generator<mt19937, uniform_int<> > myrandom (engine, distribution);for (int i=0; i<100; ++i)cout << myrandom() << endl;return 0; }

此代碼生成介于 1 和 100 之間(包括 1 和 100)的隨機數;用于實現隨機化的基礎引擎是 mt19937。


variate_generator 為您組合了該引擎和分布。
清單 12 使用了另一個引擎: kreutzer1986.

清單 12:組合 uniform_real 分布和 kreutzer1986 引擎


#include <iostream> #include <boost/random.hpp> using namespace std; using namespace boost; int main ( ) {uniform_real<> distribution(1, 2) ;kreutzer1986 engine ;variate_generator<kreutzer1986, uniform_real<> > myrandom (engine, distribution);for (int i=0; i<100; ++i)cout << myrandom() << endl;return 0; }


除了 uniform_int 和 uniform_real 分布以外,Boost 還提供了幾個其他分布,包括二項式、泊松和正
態分布。
4.boost::pool 庫概述
Boost pool 庫引入了可用于實現快速內存分配的工具。正確的內存塊對齊可以得到保證。
根據 Boost 文檔所述,當您分配和釋放許多小型對象時,建議使用池。使用池的另一個不太明顯的優點
在于,作為程序員,您不必擔心內存泄露:內存由 Boost 庫在內部自動進行管理。要使用 pool 庫,您
不必在鏈接時提供特定的庫——單憑頭文件就足以完成鏈接了。
有多個接口對 pool 庫可用:
池接口——替代 malloc 進行工作的普通接口。要使用此接口,需要包括 boost/pool 文件夾中的?
pool.hpp 頭文件。
對象池接口——有對象意識的接口,在對象創建和刪除過程中分別相應地調用構造函數和析構函數。還
可以使用此接口創建普通對象,而不調用它們的構造函數。接口定義是在位于 boost/pool 目錄中的?
object_pool.hpp 頭文件中提供的。清單 13 引入了 pool 和 object_pool 接口。請注意以下幾點:
pool 接口需要知道每個單獨的元素而不是類型的大小,因為它是一個 malloc 風格的分配程序,不會調
用構造函數。
pool 接口中的 malloc 例程返回 void*。
object-pool 接口需要類型信息,因為要調用構造函數。
object-pool 接口中的 malloc/construct 例程返回指向類型的指針。malloc 例程不調用構造函數,但
是construct 要調用構造函數。
使用 pool 接口或 object-pool 接口來創建的元素的范圍與從中創建它們的池的范圍相同。
要從池接口中釋放內存,可以調用 purge_memory 方法。該方法釋放您先前創建的內存塊,并使得從分
配程序例程返回的所有指針失效。
要釋放各個元素,可以調用 pool 接口中的 free 例程。例如,如果 t 是使用 pool 接口來創建的池,
并且 m 是從 t分配的指針,則 t.free(m) 將把內存返回給 t(將其添加到 t 的空閑內存列表)。

清單 13. pool 和 object_pool 接口

#include <iostream> #include <boost/pool/pool.hpp> #include <boost/pool/object_pool.hpp> using namespace std; using namespace boost; class A {public: A( ) { cout << "Declaring An"; }~A( ) { cout << "Deleting An"; } };int main ( ) {cout << "Init pool...n";pool<> p(10 * sizeof(A));for (int i=0; i<10; ++i)A* a = (A*) p.malloc(); // Always returns sizeof(A)p.purge_memory();cout << "Init object pool...n";object_pool<A> q;for (int i=0; i<10; ++i)A* a = q.construct(); // Calls A's constructor 10 timesreturn 0; }


singleton_pool 接口——與 pool 接口幾乎相同,但是用作獨立池。獨立池的底層結構具有為 malloc
、free 等聲明的靜態成員函數,并且構造函數是私有的。獨立池聲明中的第一個參數稱為標記— —它
允許存在不同的獨立池集(例如,用于 int 的多個池,其中每個池服務于不同的目的)。必須包括?

singleton_pool.hpp 頭文件才能使用此接口。請參見清單 14。

清單 14. singleton_pool 接口

#include <iostream> #include <boost/pool/singleton_pool.hpp> using namespace std; using namespace boost; struct intpool { }; struct intpool2 { }; typedef boost::singleton_pool<intpool, sizeof(int)> ipool1; typedef boost::singleton_pool<intpool2, sizeof(int)> ipool2;int main ( ) {cout << "Init singleton pool...n";for (int i=0; i<10; ++i) {int* q1 = (int*) ipool1::malloc();int* q2 = (int*) ipool2::malloc(); }ipool1::purge_memory();ipool2::purge_memory();return 0; }

pool_alloc 接口——通常與 STL 容器結合在一起使用。請考慮以下代碼片段: #include?

<boost/pool/pool_alloc.hpp>
std::vector<int, boost::pool_allocator<int> > v;
std::list<double, boost::fast_pool_allocator<double> > L;
存在兩個分配程序:pool_allocator 和 fast_pool_allocator。第一個分配程序是通用分配,可以滿足

針對任何數量的連續內存塊的請求。fast_pool_allocator 最適合于一次請求單個(通常較大)塊,但

是也適用于通用分配,不過具有一些性能缺點。
5.boost::program_options 簡介
命令行處理是另一個難點,開發人員通常不會采用結構化的方式來解決。其結果是從頭到尾維護開銷。

Boost program_options 庫提供了簡化命令行處理的例程和數據結構。
清單 15 詳細描述了 boost::program_options 的使用。這是建議在您的代碼中使用的標準模板。

清單 15. 使用 boost::program_options


#include <string> #include <iostream> #include <boost/program_options.hpp> using namespace std; int main (int ac, char* av[]) {boost::program_options::options_description options("command line options");options.add_options() ("help", "Use -h or --help to list all arguments")("file", boost::program_options::value<string> (),"Provide input file name");boost::program_options::variables_map vmap;boost::program_options::store(boost::program_options::parse_command_line(ac, av, options), vmap);boost::program_options::notify(vmap);if (vmap.count("help")) {cout << options << endl;}return 0; }


您必須包括 program_options.hpp 頭文件。清單 15 的工作方式如下:
options_description 類聲明所有的有效命令行選項。
使用方法 add_options,您可以注冊命令和跟在命令后面的參數類型。在此例中,help 選項不需要任何

參數,但是file 選項需要一個字符串參數。
variables_map 類在運行時存儲命令行選項及其參數。
Boost 的 parse_command_line 例程解析 argc 和 argv 參數。store 和 notify 方法幫助存儲 vmap?

對象中的數據。
當您檢查 help 是否為程序的恰當命令行選項(這是 vmap.count("help") 所做的工作)時,options?

對象將被轉儲到 cout。這意味著運算符 << 是為 options_description 類定義的。
下面是來自清單 15 的輸出:
[user@/home/user1] ./a.out --help
command line options:
 --help         Use -h or --help to list all arguments
 --file arg      Provide input file name
當您遇到其他選項時,可以采取進一步的操作。例如,下面的代碼片段經過了修改,以打印您輸入的文

件名:

if (vmap.count("file")) {
   cout << "Setting input file to " << vmap["file"].as<string>() << ".n";
} else {
   cout << "No file specifiedn";
}

請注意,variable_map 類在許多方面與哈希表非常相似。例如,要檢索 file 參數,您可以調用 vmap

["file"]。
提供多個參數和縮寫的命令選項
命令行處理通常同時需要同一個命令選項的短名稱和長名稱。此外,您通常必須多次使用某個選項,以
便收集該選項的所有參數。例如,您可能希望使用 ¨Ch 和 ¨Chelp 來打印可用的命令。清單 16 演示

了這些功能。


清單 16. 使用較短的選項變體并允許多次調用命令選項
#include <string> #include <iostream> #include <boost/program_options.hpp> using namespace std; int main (int ac, char* av[]) {boost::program_options::options_description options("command line options");options.add_options() ("help,h", "Use -h or --help to list all arguments")("file", boost::program_options::value<vector<string> >( ),"Provide input file name");boost::program_options::variables_map vmap;boost::program_options::store(boost::program_options::parse_command_line(ac, av, options), vmap);boost::program_options::notify(vmap);if (vmap.count("help")) {cout << options << endl;}if (vmap.count("file")) {vector<string> ifiles(vmap["file"].as< vector<string> > ());vector<string>::iterator vI;cout << "Number of input files: " << ifiles.size() << endl;cout << "Input file list: " << endl;for(vI = ifiles.begin(); vI != ifiles.end(); ++vI)cout << "t" << *vI << endl;} else {cout << "No file specifiedn";}return 0; }


在使用 add_options 來添加命令選項時,較長和較短的選項之間使用逗號進行分隔。請注意,較長的選

項 (help)必須在較短的選項 (h) 之前,代碼才能正常工作。與使用單個字符串不同,file 選項現在是

使用一個字符串向量來定義的。如果指定了 ¨Cfile 選項多次,則會將在所有指定中收集到的命令選項

參數存儲在關聯的 vector<string>中。下面是使用不同的參數來多次指定 ¨Ch 和 ¨Cfile 所獲得的

輸出:
[user@/home/user1] ./a.out -h
command line options:
-h [ --help ] Use -h or --help to list all arguments
--file arg Provide input file name
No file specified
[user@/home/user1] ./a.out --file abc --file pqr
Number of input files: 2
Input file list:
abc
pqr
解析位置選項
帶輸入參數但是不帶命令行選項來調用某個程序是非常普遍的。您預期參數和命令行選項之間自動存在

某種神奇關聯。這種行為由 boost::program_options 提供支持。
請考慮清單 17。第一個參數轉換為 --file=<first parameter>,第二個參數轉換為 --do-?

file=<second parameter>。

清單 17. 將位置參數與命令行選項相關聯

#include <string> #include <iostream> #include <boost/program_options.hpp> using namespace std; int main (int ac, char* av[]) { boost::program_options::options_description options("command line options"); options.add_options() ("help,h", "Use -h or --help to list all arguments") ("file", boost::program_options::value<string>(), "Provide input file name") ("do-file", boost::program_options::value<string>(), "Specify commands file"); boost::program_options::variables_map vmap; boost::program_options::positional_options_description poptd; poptd.add ("file", 1); poptd.add("do-file", 2); boost::program_options::store( boost::program_options::command_line_parser(ac, av). options(options).positional(poptd).run(), vmap); boost::program_options::notify(vmap); if (vmap.count("file")) { cout << "file: " << vmap["file"].as<string> ( ) << endl; } if (vmap.count("do-file")) { cout << "do- file: " << vmap["do-file"].as<string> ( ) << endl; } return 0; }

下面是輸出內容:
[user@/home/user1] ./a.out file1 dofile1
file: file1
do-file: dofile1
清單 15 中使用的某些 API 在清單 17 中已發生更改。清單 17 引入了新的類?

positional_options_description。該類的 add 方法(add("command option", N))將位置 N 處的輸

入參數與命令行選項 "command option" 相關聯。因此,./a.out file1 在內部解析為 ./a.out?

¨Cfile=file1。另一個區別在于調用 program_options::store方法的方式。與使用?

parse_command_line 例程不同,Boost 庫要求您將 command_line_parser 例程與store 方法結合在一

起使用。
請注意,仍然可以使用 ¨Cfile 和 ¨Cdo-file 選項來調用該程序。最后,若要將所有的輸入參數與同

一個命令行選項相關聯,您需要使用值 -1 將該命令行選項添加到 positional_options_description?

對象。下面是代碼:

boost::program_options::positional_options_description poptd;
poptd.add ("file", -1);
========

boost::algorithm的幾個簡單例子

http://blog.csdn.net/huang_xw/article/details/8451442

void test_foreach() { using namespace boost::assign; std::vector<int> v; v += 1, 2, 3, 4, 5, 6, 7, 8, 9; BOOST_FOREACH(int x, v) { std::cout << x << ", "; } std::cout << std::endl; std::string str("boost foreach"); BOOST_FOREACH(char& x, str) { std::cout << x << "-"; } std::cout << std::endl; } void test_minmax() { struct Comp { bool operator()(const std::string &a, const std::string &b) { return (a < b) || (b.find("BOSS") != std::string::npos); } }; std::string s1("5000"), s2("123BOSS"); BOOST_AUTO(x, minmax(s1, s2)); std::cout << x.second << " " << x.first << std::endl; BOOST_AUTO(y, minmax(s1, s2, Comp())); std::cout << y.second << " " << y.first << std::endl; } void test_minmax_element() { std::vector<int> v = boost::assign::list_of(633)(90)(67)(83)(2)(100); BOOST_AUTO(x, boost::minmax_element(v.begin(), v.end())); std::cout << "min: " << *x.first << std::endl; std::cout << "max: " << *x.second << std::endl; }


========

boost c++庫學習實例

http://blog.csdn.net/earbao/article/details/17398939


1、Linux下載編譯boost源碼:
./bootstrap.sh
sudo ./bjam --layout=versioned --build-type=complete ?install?
2、測試實例:
[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
#include <cstdlib> ?
#include <iostream> ?
#include <string> ?
#include <boost/progress.hpp> ?
#include <boost/asio.hpp> ?
#include <fstream> ?
#include <vector> ?
using namespace std; ?
using namespace boost; ?
??
void test001() { ?
? ? std::vector<std::string> v(100); ?
? ? std::ofstream fs; ?
? ? progress_display pd(v.size()); ?
??
? ? std::vector<string>::iterator it; ?
? ? for (it = v.begin(); it != v.end(); ++it) { ?
? ? ? ? fs << *it << std::endl; ?
? ? ? ? ++it; ?
? ? ? ? cout << "*"; ?
? ? ? ? //sleep(1); ?
? ? } ?
? ? cout << endl; ?
} ?
#include <boost/date_time/gregorian/greg_date.hpp> ?
#include <boost/date_time/gregorian_calendar.hpp> ?
??
void test002() { ?
? ? boost::gregorian::date d(2010, 1, 30); ?
? ? std::cout << d.year() << std::endl; ?
? ? std::cout << d.month() << std::endl; ?
? ? std::cout << d.day() << std::endl; ?
? ? std::cout << d.day_of_week() << std::endl; ?
? ? std::cout << d.end_of_month().day() << std::endl; ?
} ?
#include <boost/shared_ptr.hpp> ?
??
class Shared { ?
public: ?
??
? ? Shared() { ?
? ? ? ? std::cout << "ctor() called" << std::endl; ?
? ? } ?
??
? ? Shared(const Shared & other) { ?
? ? ? ? std::cout << "copy ctor() called" << std::endl; ?
? ? } ?
??
? ? ~Shared() { ?
? ? ? ? std::cout << "dtor() called" << std::endl; ?
? ? } ?
??
? ? Shared & operator =(const Shared & other) { ?
? ? ? ? std::cout << "operator = called" << std::endl; ?
? ? } ?
}; ?
??
void test003() { ?
? ? typedef boost::shared_ptr<Shared> SharedSP; ?
? ? typedef std::vector<SharedSP> VShared; ?
? ? VShared v; ?
? ? v.push_back(SharedSP(new Shared())); ?
? ? v.push_back(SharedSP(new Shared())); ?
} ?
#include <boost/lexical_cast.hpp> ??
//字符串轉換為整形 ?
??
void test004(string str) { ?
? ? int i = boost::lexical_cast<int>(str); ?
? ? cout << i << endl; ?
} ?
#include <boost/format.hpp> ??
??
void test_format() { ?
? ? // 使用%序號%的方式給出指示符, 后面用%連接對應的數據。 ?
? ? cout << boost::format("writing %1%, ?x=%2% : %3%-th try") % "toto" % 40.23 % 50 <<?


endl; ?
? ? // 輸出:writing toto, ?x=40.23 : 50-th try ?
? ? // 可以延遲使用,順序不必一致 ?
? ? boost::format fmter("%2% %1%"); ?
? ? fmter % 36; ?
? ? fmter % 77; ?
? ? cout << fmter << endl; ?
? ? // 輸出:77 36 ?
??
? ? // 可重用 ?
? ? fmter % 12; ?
? ? fmter % 24; ?
? ? cout << fmter << endl; ?
? ? // 輸出:24 12 ?
??
? ? // 可直接轉成字符串 ?
? ? std::string s = fmter.str(); ?
? ? std::string s2 = str(boost::format("%2% %1% %2% %1%") % "World" % "Hello"); ?
??
? ? cout << s << endl << s2 << endl; ?
? ? // 輸出: ?
? ? // 24 12 ?
? ? // Hello World Hello World ?
??
? ? // 可以使用printf指示符 ?
? ? cout << boost::format("%3.1f - %.2f%%") % 10.0 % 12.5 << endl; ?
? ? // 輸出:10.0 - 12.50% ?
??
? ? // printf指示符里使用N$指定使用第幾個參數 ?
? ? cout << boost::format("%2$3.1f - %1$.2f%%") % 10.0 % 12.5 << endl; ?
? ? // 輸出:12.5 - 10.00% ?
} ?
#include <boost/algorithm/string.hpp> ?
??
void test005() { ?
? ? string str("readme001readme002readme.txt"); ?
? ? if (ends_with(str, "txt")) { ?
? ? ? ? cout << to_upper_copy(str) + " UPPER" << endl; ?
? ? ? ? assert(ends_with(str, "txt")); ?
? ? } ?
? ? replace_first(str, "readme", "followme"); ?
? ? replace_all(str, "readme", "hehe"); ?
? ? cout << str << endl; ?
? ? vector<char> v(str.begin(), str.end()); ?
? ? vector<char> v2 = to_upper_copy(erase_first_copy(v, "txt")); ?
? ? for (int i = 0; i < v2.size(); ++i) { ?
? ? ? ? cout << v2[i]; ?
? ? } ?
? ? cout << endl; ?
} ?
#include <boost/tokenizer.hpp> ??
??
void test_tokenizer() { ?
? ? string s("This is ?, a ,test!,中文,你好"); ?
? ? boost::tokenizer<> tok(s); ?
? ? for (tokenizer<>::iterator beg = tok.begin(); beg != tok.end(); ++beg) { ?
? ? ? ? cout << *beg << "-"; ?
? ? } ?
? ? cout << endl; ?
} ?
#include <boost/xpressive/xpressive_dynamic.hpp> ?
#include <boost/regex.hpp> ?
//需要編譯器加上 -lboost_regex ?
//使用cppunit需要連接器加上 -lncurses -lcppunit -ldl ?
void test006() { ?
??
? ? regex reg("a.c"); ?
? ? assert(regex_match("abc", reg)); ?
? ? //assert(regex_match("a + c", reg)); ?
? ? assert(!regex_match("ac", reg)); ?
? ? assert(!regex_match("abd", reg)); ?
??
? ? boost::regex reg2("\\d{3}([a-zA-Z]+).(\\d{2}|N/A)\\s\\1"); ?
? ? std::string correct = "123Hello N/A Hello"; ?
? ? std::string incorrect = "123Hello 12 hello"; ?
? ? assert(boost::regex_match(correct, reg2) == true); ?
? ? assert(boost::regex_match(incorrect, reg2) == false); ?
} ?
??
#include <boost/any.hpp> ??
??
void test_any() { ?
? ? typedef std::vector<boost::any> many; ?
? ? many a; ?
? ? a.push_back(2); //可以轉換 ?
? ? a.push_back(string("test")); //轉換失敗 ??
? ? for (unsigned int i = 0; i < a.size(); ++i) { ?
? ? ? ? cout << a[i].type().name() << "="; ?
? ? ? ? try { ?
? ? ? ? ? ? int result = any_cast<int>(a[i]); ?
? ? ? ? ? ? cout << result << endl; ?
? ? ? ? } catch (boost::bad_any_cast & ex) { ?
? ? ? ? ? ? cout << "cast error:" << ex.what() << endl; ?
? ? ? ? } ?
? ? } ?
} ?
??
#include <boost/thread/thread.hpp> ?
??
void hello() { ?
? ? std::cout << "Hello world, I'm a thread!" << std::endl; ?
} ?
//編譯需要加上-lboost_system -L/usr/local/lib -lboost-thread ?
//-lboost_thread -lboost_system ??
//如果報錯error while loading shared libraries: libboost_thread.so.1.49.0: cannot open?


shared object file: No , ?
//則使用sudo ldconfig /home/shaochangqing/study/boost_1_49_0/stage/lib 或者export PATH=


${PATH}:/usr/local/lib:/usr/local/include ?
??
int test_Thread() { ?
? ? boost::thread thrd(&hello); // 譯注:hello前面的&符號,可要可不要 ?
? ? thrd.join(); ?
? ? return 0; ?
} ?
??
//extern bool httpGet(/*out*/string& result, const string& host, uint16_t port, const?


string& url, boost::asio::io_service &_io); ?
??
/** 本程序基于boost1_55_0*/ ?
int main(int argc, char** argv) { ?
??
? ? test_Thread(); ?
? ? test001(); ?
? ? test002(); ?
? ? test003(); ?
? ? test004("123456"); ?
? ? test_format(); ?
? ? test005(); ?
? ? test_tokenizer(); ?
? ? test006(); ?
? ? test_any(); ?
? ? /**boost::asio::io_service io;?
? ? string str;?
? ? httpGet(str,"http://www.baidu.com/",80,"index.html",io);?
? ? cout<<str<<endl;*/ ?
? ? printf("\nok\n"); ?
? ? return 0; ?
}?
========

c++ boost 漢字和模式串混用的例子

http://www.cnblogs.com/finallyliuyu/p/3745097.html


*===============================================================
* ? Copyright (C) 2013 All rights reserved.
* ??
* ? 文件名稱:StringProcess.cpp
* ? 創 建 者:
* ? 創建日期:2013年04月24日
* ? 描 ? ?述:
* ? 備 ? ?注:?
* ? 更新日志:
*
================================================================*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>?
#include <sys/time.h>
#include<ctype.h>
#include<locale.h>
#include "boost/regex.hpp"
#include <iconv.h>?
#include <errno.h>
#include<algorithm>
// please add your code here!
using namespace std;
#define MAX_LINE_LENGTH 1048576
#define TAGLEN 50
/************************************************************
* @brief <funcName:trim> Author:劉禹 finallyly 20130425 去掉字符串首尾空格
==================================================
* @param s
==================================================
**********************************************************/
void trim(char *s)
{
? ? char *start;
? ? char *end;
? ? int len=strlen(s);
? ? start=s;
? ? end=s+len-1;
? ? while(1)
? ? {
? ? ? ? char c=*start;
? ? ? ? if(!isspace(c))
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? start++;
? ? ? ? if(start>end)
? ? ? ? {
? ? ? ? ? ? s[0]='\0';
? ? ? ? ? ? return ;
? ? ? ? }
? ? }
? ? while(1)
? ? {
? ? ? ? char c=*end;
? ? ? ? if(!isspace(c))
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? end --;
? ? ? ? if(start>end)
? ? ? ? {
? ? ? ? ? ? s[0]='\0';
? ? ? ? ? ? return;
? ? ? ? }
? ? }
? ? memmove(s,start,end-start+1);
? ? s[end-start+1]='\0';
? ? return;
}


inline bool strTolower( char* str )
{
? ? if ( !str )
? ? ? ? return false;
? ? int i = 0;
? ? bool flag = true;
? ? while ( str[i] )
? ? {
? ? ? ? if ( 'A' <= str[i] && 'Z' >= str[i] )
? ? ? ? {
? ? ? ? ? ? str[i] += 32;
? ? ? ? }
? ? ? ? else if ( 'a' <= str[i] && 'z' >= str[i] )
? ? ? ? {
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? flag = false;
? ? ? ? }
? ? ? ? ++i;
? ? }
? ? return flag;
}


/************************************************************
* @brief <funcName:> Author:劉禹 finallyly
* 從系統默認的漢字編碼本機是GBK轉unicode,寬字符保存
==================================================
* @param sToMatch
==================================================
* @return?
**********************************************************/
wstring String2Wstring(string sToMatch)
{ ? ??
? ? wstring wsToMatch;
? ? setlocale( LC_CTYPE, "" ); // 很重要,沒有這一句,轉換會失敗。 ??
? ? int iWLen = mbstowcs( NULL, sToMatch.c_str(), sToMatch.length() ); // 計算轉換后寬字符


串的長度。(不包含字符串結束符)
? ? if(iWLen>0)
? ? {
? ? ? ? wchar_t *lpwsz = new wchar_t[iWLen + 1]; ?
? ? ? ? int i = mbstowcs( lpwsz, sToMatch.c_str(), sToMatch.length() ); // 轉換。(轉換后的


字符串有結束符) ??
? ? ? ? wsToMatch.assign(lpwsz); ?
? ? ? ? delete []lpwsz; ?
? ? }
? ? else
? ? {
? ? ? ? wsToMatch=L""; ? ?
? ? }
? ? return wsToMatch;
} ?
/************************************************************
* @brief <funcName:> Author:劉禹 finallyly
* Unicode轉系統自帶編碼,用于輸出
==================================================
* @param sToMatch
==================================================
* @return?
**********************************************************/
string Wstring2String(wstring sToMatch) ?
{ ? ??
? ? string sResult;
? ? int iLen = wcstombs( NULL, sToMatch.c_str(), 0 ); // 計算轉換后字符串的長度。(不包含字


符串結束符) ??
? ? if(iLen>0)
? ? {
? ? ? ? char *lpsz = new char[iLen + 1]; ?
? ? ? ? int i = wcstombs( lpsz, sToMatch.c_str(), iLen ); // 轉換。(沒有結束符) ??
? ? ? ? lpsz[iLen] = '\0'; ?
? ? ? ? sResult.assign(lpsz);?
? ? ? ? delete []lpsz; ?
? ? }
? ? else
? ? {
? ? ? ? sResult="";
? ? }
? ? return sResult; ?
}
/************************************************************
* @brief <funcName:> Author:劉禹 finallyly
* 從指定編碼轉換到目標編碼
==================================================
* @param toCode
==================================================
* @param fromCode
==================================================
* @param srcstr
==================================================
* @param deststr
==================================================
* @param srclen
==================================================
* @param destlen
==================================================
* @return?
**********************************************************/
int toAnotherCode(const char *toCode,const char *fromCode,char *srcstr, char *deststr,?


size_t srclen,size_t &destlen)
{
? ? iconv_t convertor=iconv_open(toCode,fromCode);
? ? size_t inputsize;
? ? size_t outputsize;
? ? size_t oldoutputsize;
? ? char *input, *inputold;
? ? char *output=NULL;
? ? char *outputold=NULL;
? ? int flag=0;
? ? if(convertor==iconv_t(-1))
? ? {
? ? ? ? fprintf(stderr,"convertor device initailization failed!\n");
? ? ? ? return 1;
? ? }
? ? else
? ? {
? ? ? ? inputsize=srclen;
? ? ? ? input=new char[inputsize+1];
? ? ? ? memcpy(input,srcstr,inputsize);
? ? ? ? input[inputsize]='\0';
? ? ? ? inputold=input;
? ? ? ? outputsize=inputsize*5;
? ? ? ? oldoutputsize=outputsize;
? ? ? ? output=new char[outputsize];
? ? ? ? output[0]=0;
? ? ? ? outputold=output;
? ? ? ? size_t rc = iconv(convertor,&input,&inputsize,&output,&outputsize);
? ? ? ? memcpy(deststr,outputold,oldoutputsize-outputsize);
? ? ? ? deststr[destlen]=0;
? ? ? ? destlen=oldoutputsize-outputsize;
? ? ? ? if(rc>0)
? ? ? ? {
? ? ? ? ? ? flag=1;
? ? ? ? }
? ? ? ??
? ? ? ? delete []inputold;
? ? ? ? delete []outputold;


? ? }
? ? iconv_close(convertor);
? ? if(flag==1)
? ? {
? ? ? ? return 0;
? ? }
? ? else
? ? {
? ? ? ? return 1;
? ? }


}
/************************************************************
* @brief <funcName:PrintUsage> Author:劉禹 finallyly 20130424
==================================================
**********************************************************/
void PrintUsage()
{
? ? fprintf( stderr, "prog [IN]hzpylist_file [IN]input_file [OUT]output_file [OUT]


errdmp_file\n" );
}
void testRegex()
{
? ? string s="劉禹,劉德華,劉佳佳。。。王大虎。。。劉長春,xixi";
? ? string t="劉[^劉]*?,";
? ? wstring p=String2Wstring(t);
? ? wstring ws=String2Wstring(s);
? ? boost::wregex wreg(p,boost::regbase::icase|boost::regex::perl);
? ? boost::wsmatch wm;
? ? vector<string> results;
? ? wstring::const_iterator ?it=ws.begin();
? ? wstring::const_iterator ?end=ws.end();
? ? while(boost::regex_search(it,end,wm,wreg))
? ? {
? ? ? ? wstring wtemp=wm[0];
? ? ? ? string temp=Wstring2String(wtemp);
? ? ? ? results.push_back(temp);
? ? ? ? it=wm[0].second;
? ? }
? ? fprintf(stdout,"輸出正則匹配結果\n");
? ? for(vector<string>::iterator it=results.begin();it!=results.end();it++)
? ? {
? ? ? ? ? ? printf("%s\n",(*it).c_str());
? ? }
}
int LoadFile(char* inputfile)
{
? ? FILE *fin = NULL;
? ? char line[102400] = {0};
? ? char word[102400] = {0};
? ? int len = 0;
? ? fin = fopen(inputfile, "r");
? ? if (NULL == fin)
? ? {
? ? ? ? fprintf(stderr,"LoadAddress can not open inputfilename %s\n", inputfile);
? ? ? ? return 1;
? ? }
? ??
? ? while(true)
? ? {
? ? ? ? fgets(line, 102400, fin);
? ? ? ? if (feof(fin))
? ? ? ? {
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? len = strlen(line);
? ? ? ? if (0 == line[0] || '\n' != line[len - 1])
? ? ? ? {
? ? ? ? ? ? continue;
? ? ? ? }
? ? ? ? line[len - 1] = 0;
? ? ? ? string pattern ="首都或首府:";
? ? ? ? string p1="([\u2E80-\u9FFF])+";
? ? ? ? wstring wp1 = String2Wstring(p1);
? ? ? ? //wstring wpattern = L"([\u2E80-\u9FFF])+";
? ? ? ? wstring wpattern = L"([\u2E80-\u9FFF]+)"+String2Wstring(pattern)+L"([\u2E80-


\u9FFF]+)";
? ? ? ? wstring winputstr = String2Wstring(line);
? ? ? ? boost::wregex wreg(wpattern, boost::regex::perl|boost::regbase::icase);
? ? ? ? boost::smatch what;
? ? ? ? boost::wsmatch wswhat;
? ? ? ? wstring::const_iterator wstrit = winputstr.begin();
? ? ? ? wstring::const_iterator wstrend = winputstr.end();
? ? ? ? while (boost::regex_search(wstrit, wstrend, wswhat, wreg))
? ? ? ? {
? ? ? ? ? ? wstring ws1 = wswhat[1];
? ? ? ? ? ? wstring ws2 = wswhat[2];?
? ? ? ? ? ? string s1 = Wstring2String(ws1);
? ? ? ? ? ? string s2 = Wstring2String(ws2);
? ? ? ? ? ? fprintf(stdout, "%s\t%s\n", s1.c_str(), s2.c_str());
? ? ? ? ? ? wstrit=wswhat[0].second; ?
? ? ? ? }
? ? }
? ??
? ? if (NULL != fin)
? ? {
? ? ? ? fclose(fin);
? ? ? ? fin = NULL;
? ? }
? ? return 0;
}
int main( int argc, char *argv[] )
{
? ? timeval tv1, tv2;
? ? gettimeofday(&tv1, NULL);?
? ??
? ? if ( 2 != argc )
? ? {
? ? ? ? PrintUsage();
? ? ? ? return 1;
? ? }
? ??
? ? LoadFile(argv[1]);
? ? gettimeofday(&tv2, NULL);
? ? fprintf(stderr,"%s has finished congratulations!\n",argv[0]);
? ? fprintf( stderr,"time elapsed: %.2f ms\n", (float)((tv2.tv_sec - tv1.tv_sec)


*1000000+(tv2.tv_usec-tv1.tv_usec))/1000);
? ? return 0;
}
========

總結

以上是生活随笔為你收集整理的C++ boost 实例学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

精品中文字幕在线 | 在线看成人 | 国产精品一区在线观看你懂的 | 91精品国产自产在线观看永久 | 天天鲁一鲁摸一摸爽一爽 | 国产xxxxx在线观看 | 99热在线免费观看 | 国产伦精品一区二区三区无广告 | 91中文字幕网 | 国产粉嫩在线观看 | www一起操 | 中文字幕一区二区三区四区在线视频 | 亚洲视频在线观看免费 | 69亚洲精品 | 亚洲人成综合 | 免费视频久久 | 免费精品视频在线观看 | 亚洲国产精品第一区二区 | 日本视频精品 | 色婷婷激情电影 | 欧美日韩久久不卡 | 涩涩资源网 | 国产精品美女久久久久久久久久久 | 久久久久久黄色 | 欧美乱码精品一区二区 | 国产成人久久精品77777 | 日韩欧美黄色网址 | www.干| www五月天com| 久久精品成人欧美大片古装 | 久久久免费观看 | 久久精品一二三 | 日韩r级电影在线观看 | 亚洲国产网址 | 国产拍揄自揄精品视频麻豆 | 久草在线资源视频 | 国产精品aⅴ | 日韩在线观看影院 | 精品国产精品一区二区夜夜嗨 | 中文在线免费一区三区 | 又爽又黄又无遮挡网站动态图 | 99精品免费| 欧美一区二区三区免费看 | 国产手机在线观看 | 97av免费视频| 在线看片日韩 | 国内外激情视频 | 婷婷亚洲最大 | 精品久久久久亚洲 | 亚洲另类在线视频 | 国产成视频在线观看 | 日韩精品一区二区三区电影 | 国产小视频福利在线 | 粉嫩av一区二区三区四区 | 午夜视频在线观看网站 | 西西大胆免费视频 | 天天草天天干天天射 | 欧美日韩一区二区三区免费视频 | 亚洲午夜精品久久久久久久久久久久 | 91毛片视频 | 久草电影网 | 国产人成看黄久久久久久久久 | 午夜色场 | 免费在线看v | 日本在线视频网址 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲精选视频在线 | 日本在线观看一区二区 | 国产高清在线免费 | 国产一级二级在线观看 | 国产一区二区三区黄 | 亚洲国产一二三 | 亚洲一区久久久 | 狠狠色狠狠色综合系列 | 久久久电影 | 黄色网大全 | 久操伊人| 干干干操操操 | 成人久久久久久久久久 | 久久五月激情 | 黄色小说在线免费观看 | 国产精品美女久久 | 亚洲综合成人av | 草久在线观看 | 九九视频免费 | 国产视频在线一区二区 | 国产三级国产精品国产专区50 | 黄色资源网站 | 亚洲精品美女久久久久网站 | 午夜久久福利 | 午夜三级理论 | 最新日韩视频 | 久久精品一区二区 | 国产一二三在线视频 | www.eeuss影院av撸 | 中文字幕日韩在线播放 | 97超碰人 | 色视频成人在线观看免 | 色婷婷狠狠 | 日韩欧美一区二区三区黑寡妇 | 国产成人黄色 | 97视频人人免费看 | 在线观看片 | 久久草草影视免费网 | a天堂最新版中文在线地址 久久99久久精品国产 | 91精品国产一区 | 天天操天天色天天射 | 日韩网站中文字幕 | 又粗又长又大又爽又黄少妇毛片 | 日韩亚洲在线视频 | 最近日韩免费视频 | 四虎国产精品永久在线国在线 | 久久久久久高潮国产精品视 | 国产精品99久久久久久人免费 | 国产精品久久9 | 88av网站 | 国产综合在线视频 | 久久99网 | a色视频 | 欧美日韩伦理在线 | 免费在线电影网址大全 | 成人av电影免费在线观看 | 久久激情五月激情 | 国产一区福利在线 | 欧美久久综合 | 久久精品79国产精品 | 91精品国产福利在线观看 | 一区二区三区动漫 | 91精品国产99久久久久久久 | 国产女人免费看a级丨片 | aav在线| 国外av在线| 日韩av一区二区三区四区 | 黄色小网站免费看 | 91热爆在线观看 | 最新国产福利 | 精品一二三四在线 | 久久久久亚洲最大xxxx | 亚洲妇女av | 成人福利在线 | 日韩免费视频线观看 | 99国产在线 | 亚洲欧美日韩一级 | 国产精品原创av片国产免费 | 亚洲国产精品99久久久久久久久 | 操高跟美女 | 黄色aaa级片| 日本不卡123区 | 五月天亚洲综合 | 日韩一区二区三区免费视频 | 91精品国自产在线偷拍蜜桃 | 丁香花在线视频观看免费 | 亚洲成 人精品 | 黄色三级av | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 日韩高清久久 | 国产一级片一区二区三区 | 国产一二区免费视频 | 四季av综合网站 | 亚洲 综合 精品 | 美女网站视频久久 | 日本久久中文字幕 | 亚洲性少妇性猛交wwww乱大交 | 免费网站污| 在线播放日韩av | 91麻豆文化传媒在线观看 | 毛片久久久| 久久精品99国产精品日本 | 国产欧美日韩一区 | 久草在线视频在线 | 精品国产一区二区三区日日嗨 | 探花视频在线版播放免费观看 | 亚洲视频观看 | 最新精品国产 | 狠狠色丁香婷婷综合欧美 | 91福利影院在线观看 | 国产成a人亚洲精v品在线观看 | 日韩色在线观看 | 成人亚洲精品国产www | 色七七亚洲影院 | 欧美韩日精品 | 久久久久在线 | 美女啪啪图片 | 在线看小早川怜子av | 免费在线观看成人 | 欧美日韩精品在线观看 | 国产成人精品久 | 精品一区二区免费在线观看 | 韩国av在线播放 | 免费看黄网站在线 | 欧美色婷婷| 日韩a级免费视频 | 亚洲精品一区二区三区在线观看 | 久久久久久久久久影院 | 91av播放| 黄色在线网站噜噜噜 | 国产成人久久av免费高清密臂 | 亚洲爽爽网| 久久,天天综合 | 国产乱对白刺激视频在线观看女王 | 91少妇精拍在线播放 | 伊人五月天.com| 婷婷激情站 | av片一区二区 | 免费亚洲视频在线观看 | 久久国产经典 | 在线日韩中文字幕 | 久久免费看 | 欧洲亚洲精品 | 国产亚洲精品久久久久久无几年桃 | 操操操日日日干干干 | 欧美性极品xxxx做受 | 五月花激情 | 日韩在线视频观看免费 | 久久免费精品一区二区三区 | 激情视频在线观看网址 | 国产精品资源网 | 亚洲成人av一区二区 | 97夜夜澡人人爽人人免费 | 成人a免费看 | 色网站在线 | 欧美精品资源 | 久久精品成人欧美大片古装 | 亚洲精品一区二区三区高潮 | 国产精品成久久久久三级 | 狠狠躁夜夜躁人人爽视频 | 亚洲视频1| 成人免费在线视频观看 | 女人高潮特级毛片 | 91免费高清在线观看 | 久久久麻豆精品一区二区 | 蜜臀精品久久久久久蜜臀 | 日日夜夜亚洲 | 色婷婷激情综合 | 91看片在线免费观看 | 91精品免费视频 | 国产视频欧美视频 | av网站在线免费观看 | 国产毛片久久 | 成人h在线 | 天天干天天插 | 天天爱天天色 | 久久综合影视 | 91九色国产在线 | 综合网天天色 | 成人a视频片观看免费 | 成人av免费在线播放 | 精品国产一区二区三区不卡 | 久久伊人操 | 17婷婷久久www | 成人v| 亚欧日韩成人h片 | 天天操天天操一操 | 国产黄色免费观看 | 久久国产片| 国产亚洲精品日韩在线tv黄 | 免费网站黄 | 毛片精品免费在线观看 | 国产精品资源网 | 欧美一级片在线播放 | 亚洲综合在线观看视频 | 亚洲成a人片77777kkkk1在线观看 | 亚洲性xxxx | 亚洲狠狠干 | 黄色动态图xx| 婷婷综合激情 | 成人一区影院 | 国产精品视频免费看 | 97国产电影 | 欧美性粗大hdvideo | www最近高清中文国语在线观看 | 96av视频| 亚洲精品国产精品国自产在线 | 久久狠狠干 | 啪啪动态视频 | 欧美日韩午夜在线 | 精品夜夜嗨av一区二区三区 | 亚洲精品国精品久久99热 | 91av小视频 | 欧美一区二区三区免费观看 | 中文字幕影视 | 日韩区欧美久久久无人区 | 国产不卡在线视频 | 超碰在线91 | 亚洲黄色在线播放 | a黄色片 | 99精品欧美一区二区三区 | 亚洲国产午夜 | 丁香六月久久综合狠狠色 | 麻豆久久| 久插视频| 欧美福利片在线观看 | 在线看黄色av | 日日夜夜天天干 | 国产高清久久 | 中文字幕一区二区三区四区视频 | 国产精品麻豆三级一区视频 | 日韩99热| 国产免费成人 | 国产精品白浆视频 | 91在线视频观看免费 | 国产五十路毛片 | 国产精品久久久久久久久久尿 | 欧美精品久久久久久久久久白贞 | 超碰在线中文字幕 | 免费福利视频网站 | 国产黄色网 | 免费在线观看黄色网 | 13日本xxxxxⅹxxx20 | 欧美亚洲三级 | 91免费在线视频 | 9999毛片| 亚洲精品国产精品国自产观看浪潮 | 女人18片毛片90分钟 | 色综合久久久久 | 久久久久久国产精品999 | 国产精品九九热 | 九九热在线精品视频 | 女人18毛片90分钟 | 亚洲午夜精品在线观看 | 狠狠狠的干 | 久草在线视频免费资源观看 | 99精品免费网 | 国产欧美精品一区二区三区四区 | 久久久久网址 | 黄色成人av在线 | 在线视频第一页 | 国产视频精选 | 99视频精品 | 日韩一区二区三 | 色狠狠干 | 亚洲精品乱码久久久久久9色 | 99久久er热在这里只有精品66 | 国产成人精品一区二区三区免费 | 久久人人97超碰国产公开结果 | 国产精品女同一区二区三区久久夜 | 精品国产一区二区久久 | 国产精品女同一区二区三区久久夜 | 久久情爱 | 亚洲国产wwwccc36天堂 | 中文字幕之中文字幕 | 亚洲精品在线观 | 欧美成人区 | 视频一区二区精品 | 黄色三几片 | 欧美一二三区在线观看 | 一区二区三区免费网站 | 亚洲精品18日本一区app | 免费91麻豆精品国产自产在线观看 | 国产资源网 | 色婷婷av在线 | 99re久久精品国产 | 成人福利在线观看 | av中文在线观看 | 色网影音先锋 | 亚洲日本精品视频 | 久久久午夜剧场 | 99热这里精品 | 九九99| 亚洲91在线| 成年人免费av网站 | 国产不卡一二三区 | 99久久99视频 | 日韩在线观看精品 | 久久久国产毛片 | 麻豆国产精品va在线观看不卡 | 天天干,天天操 | 国产精品久久久久久久久久东京 | 色播99 | 黄污污网站 | 国产极品尤物在线 | 国产高清久久久 | 国内精品久久久久久久久 | 日韩精品一区二区在线视频 | 日本性生活一级片 | 四虎永久免费 | 波多野结衣视频一区二区三区 | 久久久久亚洲精品成人网小说 | 国产精品国产自产拍高清av | 在线免费观看视频一区二区三区 | 在线视频在线观看 | 日本爱爱免费 | 99资源网 | av免费片| 亚洲va欧美va国产va黑人 | 伊人天堂av | 四虎国产精品成人免费影视 | 色综合久久中文综合久久牛 | 丁香花五月| 日韩精品一区二区在线观看视频 | 韩国精品在线 | 亚洲国产中文字幕在线观看 | 在线观看视频一区二区三区 | 91成人小视频 | 在线观看日韩视频 | 国产小视频国产精品 | 国产精品成人av在线 | 日韩精品无 | 色视频在线| 国内精品久久影院 | 四虎海外影库www4hu | 天天摸日日摸人人看 | 天天躁天天躁天天躁婷 | 一区二区高清在线 | 久久国产片 | 久草干 | 欧美精品久久久久性色 | 国产精品久久久久一区 | 91在线国内视频 | 四虎在线视频免费观看 | 国产精品九九久久99视频 | 久久久国内精品 | 亚洲精品乱码久久久久久蜜桃91 | 波多野结衣一区二区三区中文字幕 | 成年人在线观看 | 射射色 | 中日韩免费视频 | 91片黄在线观看动漫 | 综合网伊人 | 亚洲精品一区二区三区在线观看 | 综合久久精品 | 欧美与欧洲交xxxx免费观看 | 成人av在线直播 | 丁香花中文字幕 | 天堂av官网 | 狠狠色香婷婷久久亚洲精品 | 亚洲一级黄色大片 | 91视频链接 | 天堂av在线免费观看 | 日本精品一区二区三区在线观看 | 欧美 日韩 性 | 国产成人福利片 | 极品中文字幕 | 国产伦精品一区二区三区高清 | 国产精品99久久久久久久久久久久 | 日韩一级电影网站 | 亚洲精品在线观看网站 | 91看片在线免费观看 | 日本中文字幕一二区观 | 久久人人爽人人片 | 国内外成人免费在线视频 | 夜色资源网 | 最近中文字幕免费大全 | 在线观看日韩视频 | 国产成人黄色 | 欧美日韩aa | 91欧美视频网站 | 激情五月婷婷综合 | 成人免费在线电影 | 九九视频在线观看视频6 | 日本黄色免费电影网站 | 国产精品69久久久久 | 久草9视频| 91自拍视频在线 | 日韩在线免费看 | 在线视频 一区二区 | 色吊丝在线永久观看最新版本 | 国产视频精选 | 91亚洲永久精品 | 成人免费在线观看电影 | 天海翼一区二区三区免费 | 日本h视频在线观看 | 一区在线播放 | 99国产视频在线 | 亚洲jizzjizz日本少妇 | 黄色资源在线观看 | 亚洲成人影音 | 狠狠色丁香婷婷综合久小说久 | 色婷婷丁香 | 国产亚洲婷婷 | 亚洲免费永久精品国产 | 欧美视频国产视频 | 在线国产一区二区 | av在线免费在线 | 国内成人精品2018免费看 | 国产日产av | 好看av在线 | av中文在线影视 | 中文字幕av全部资源www中文字幕在线观看 | 99视频精品| 国产91在线免费视频 | 91九色丨porny丨丰满6 | 久久久黄色免费网站 | 九九热中文字幕 | 大胆欧美gogo免费视频一二区 | 亚洲男男gaygayxxxgv | 午夜久操 | 国产一区二区三区久久久 | 涩涩成人在线 | 国内精品亚洲 | 97超视频免费观看 | 国产理论免费 | 日韩欧美亚洲 | 国内免费久久久久久久久久久 | 国产乱视频 | 国产精品二区在线 | 中文字幕区 | 丁香五月亚洲综合在线 | 日批视频 | 九九免费观看视频 | 91成人在线免费观看 | 国产又粗又猛又黄又爽的视频 | 久久久久五月 | 69av视频在线 | 草久久久| 成片视频在线观看 | 国产精品久久久久久久久久久久冷 | 日韩在线观看免费 | 91视频免费看 | 麻豆传媒在线免费看 | 婷婷丁香五 | 国产 色 | 国精产品满18岁在线 | 人人爽久久涩噜噜噜网站 | 久久色在线观看 | 日韩欧美一区二区三区视频 | 欧美老女人xx | 欧美一级专区免费大片 | 亚洲国产日韩av | 日韩一区正在播放 | 亚洲va欧美| 国产精品99久久久精品免费观看 | 五月婷婷操 | 久久久久久久网 | 国产视频在 | 成人午夜精品福利免费 | 久久久久久免费毛片精品 | 日韩精品视频在线观看网址 | 国产资源| 精品国产自 | www.久久婷婷 | 亚洲精品国产日韩 | 在线看国产视频 | 黄色小说18 | 中文久久精品 | 日批视频在线观看免费 | 国产日产av | 亚洲一区二区三区毛片 | 国产视频一区二区在线播放 | 亚洲精品午夜国产va久久成人 | 韩日精品在线 | 国产高清福利在线 | 欧美日韩在线视频一区 | 在线观看中文字幕dvd播放 | 激情久久影院 | 夜夜夜夜操 | 久久在线观看视频 | 免费看片网站91 | 人人看人人做人人澡 | 韩国精品一区二区三区六区色诱 | 亚洲国产天堂av | 久草资源在线观看 | 久久色亚洲 | 免费看片成年人 | 久久精品国产亚洲精品 | 六月丁香婷婷久久 | 在线成人欧美 | 麻豆视频大全 | 欧美一级大片在线观看 | 色婷婷国产精品一区在线观看 | 在线观看涩涩 | 青青河边草免费 | 久久国产午夜精品理论片最新版本 | 欧美成人69av | 色婷婷国产在线 | 久久免费视频这里只有精品 | 国产色婷婷精品综合在线手机播放 | 午夜国产在线 | 毛片激情永久免费 | 五月婷婷中文 | 精品国产亚洲一区二区麻豆 | 亚洲草视频 | 五月天激情在线 | 成人一区二区三区在线 | 99这里只有 | 欧美性色综合网站 | 天天搞天天干天天色 | 国产成人福利在线观看 | 国产精品久久久久久五月尺 | 毛片精品免费在线观看 | 亚州人成在线播放 | 中文乱幕日产无线码1区 | 中文字幕在线精品 | 国产一区二区在线播放 | 亚洲精品乱码久久久久久蜜桃91 | 久久怡红院| 四虎国产视频 | 麻豆一区在线观看 | 欧美精品亚洲精品 | 五月天久久久 | 91中文在线观看 | 成人av免费在线观看 | 欧美 日韩 性 | 97中文字幕 | 人人艹人人| 精品一区二区免费在线观看 | 日韩欧美精品在线视频 | 中文字幕在线看视频 | 婷婷午夜 | 亚洲免费小视频 | 日韩免费在线观看网站 | 中文字幕欧美三区 | 亚洲 欧美 日韩 综合 | 亚洲在线成人精品 | 色999视频| 午夜手机电影 | 99热日本 | 亚洲精品在线免费播放 | 在线国产日韩 | 五月天亚洲婷婷 | 精品久久99 | 91在线播放综合 | 黄色在线免费观看网站 | 91丨九色丨蝌蚪丨老版 | 9i看片成人免费看片 | www夜夜操| 天天色天天上天天操 | 日本精品va在线观看 | 热99久久精品 | 久久综合免费视频 | 国产成人精品一区二区三区福利 | 国产不卡视频 | 亚洲综合爱 | 欧美福利精品 | 国产精品日韩欧美 | 亚洲国产成人在线播放 | 久久视频免费 | 福利视频一二区 | 日本黄色大片免费 | 国产麻豆精品免费视频 | 深夜免费福利在线 | 国产精品婷婷午夜在线观看 | 国产18精品乱码免费看 | 亚洲激情中文 | 久久亚洲欧美 | 国产精品久久久久久久久久久杏吧 | 三日本三级少妇三级99 | 国产91成人 | av午夜电影| 日韩成人精品 | 在线电影av| 国产 中文 日韩 欧美 | 国产三级久久久 | 国产一级免费播放 | 99精品在线看 | 美女视频黄在线 | 欧美日韩国产精品一区二区三区 | 久久久受www免费人成 | 97国产精品亚洲精品 | 国产精品1024 | 天天曰天天干 | 成人av免费看 | 精品国产成人在线影院 | 国产在线精品二区 | 国产人免费人成免费视频 | 91视频免费看片 | 国产一区二区久久久久 | 免费成人黄色av | 久久精品这里热有精品 | 免费看一及片 | 一本一道波多野毛片中文在线 | 五月婷婷色综合 | 免费看黄色大全 | 91成人蝌蚪| 日韩精品视频在线观看免费 | 麻豆影视在线观看 | 婷婷色狠狠 | 中文字幕在线播放一区二区 | 日韩欧美视频免费看 | www成人精品 | 五月视频 | 国产综合视频在线观看 | 片网站| 亚洲精品高清视频在线观看 | 六月久久婷婷 | 综合色在线观看 | 免费av大全 | 狠狠色丁香婷婷综合久小说久 | www.大网伊人 | 国产成人一区二区啪在线观看 | 国产亚洲婷婷 | 97在线视频免费 | 精品国产91亚洲一区二区三区www | 免费看日韩 | 香蕉免费| 国产成人久久77777精品 | 久久看片网| 日韩在线观看第一页 | 在线日本v二区不卡 | 一区二区三区在线免费播放 | 欧美视频www | 丁香六月天婷婷 | 91精品久 | 免费网站看v片在线a | 波多野结衣电影一区二区三区 | 国产精品久久久久久久av大片 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产黄色精品网站 | 人人爱人人爽 | 特级西西444www大胆高清无视频 | 久久久久久久久久免费 | 美女激情影院 | 99国产视频在线 | 久久艹欧美 | 在线观看aaa | www.com久久久| 久久久久99精品成人片三人毛片 | 久久人人爽av| 日韩欧美一区视频 | 国产91精品一区二区绿帽 | 色在线亚洲 | 欧美日韩精品影院 | 免费观看版 | 夜夜夜 | 在线观看91久久久久久 | 日韩在线视频二区 | 91精品国产自产91精品 | 91精品国产欧美一区二区 | 超碰在线色 | 久久久国产精品一区二区三区 | 在线免费观看黄色小说 | 91麻豆精品国产自产在线游戏 | 国产精品中文字幕在线播放 | 午夜精品一区二区三区在线 | 久久成人资源 | 久久精品系列 | 又黄又爽的免费高潮视频 | 亚洲不卡av一区二区三区 | 久久亚洲福利 | 又黄又刺激的视频 | 在线亚洲激情 | 国产精品毛片一区视频播不卡 | 久久精品99国产国产精 | 亚洲精品免费在线 | 深夜免费小视频 | 久久久久久久久久福利 | 在线视频中文字幕一区 | 国产一区二区三区免费在线观看 | 日韩在线观看第一页 | 色欧美综合 | 成人av影院在线观看 | 九九导航| 伊人中文在线 | 99久久久国产精品免费99 | 国产精品欧美激情在线观看 | 国产精品av在线免费观看 | 国产精品欧美久久久久无广告 | a黄色一级片 | 日韩电影精品 | 97超级碰碰碰碰久久久久 | 狠狠色丁香婷婷综合久久片 | 成人一区二区三区在线 | www99精品| 久久狠狠一本精品综合网 | www免费 | 婷婷色资源 | 欧美极度另类性三渗透 | 丁香久久 | 91精品婷婷国产综合久久蝌蚪 | 人操人| 亚洲情感电影大片 | 亚洲激情在线播放 | 日韩欧美在线国产 | 久草久草在线观看 | 日韩激情小视频 | 999在线视频 | 午夜av不卡| 91在线看免费 | 嫩草91影院 | 亚洲国产日韩欧美 | 999视频在线播放 | h网站免费在线观看 | 国产精品欧美久久久久天天影视 | 99久久精品国产亚洲 | 精品91视频 | 又黄又刺激的网站 | 国产91精品看黄网站在线观看动漫 | 在线观看中文字幕一区二区 | 天天射天天 | 五月天久久精品 | 久久国产高清视频 | 国产精品视频99 | 欧美一级片在线播放 | 在线你懂 | 999视频在线观看 | 六月婷操 | 日韩欧美亚州 | 色欧美视频 | 在线只有精品 | 精品国产三级 | 精品国产欧美一区二区三区不卡 | 日韩欧美一区二区在线观看 | 456免费视频 | 日韩在线观看的 | 精品国产乱码久久久久久三级人 | 色伊人网 | 人人玩人人添人人 | 久久久久久久影院 | 亚洲天天综合网 | 亚洲欧美国内爽妇网 | 亚洲精品国产麻豆 | 日韩成人免费在线电影 | 色综合久久久久综合 | 日韩三级久久 | 99热这里只有精品在线观看 | 国产香蕉97碰碰久久人人 | 免费在线观看日韩欧美 | 国产日韩欧美在线免费观看 | 日韩 在线| 免费在线观看av网址 | 免费av观看网站 | 久久99热精品这里久久精品 | 一区二区影院 | 在线免费高清视频 | 欧美激情精品久久久 | 在线91精品 | 亚洲精品玖玖玖av在线看 | 亚洲精品日韩在线观看 | 天天操天天添天天吹 | 欧美一区二区三区在线播放 | 亚洲激情在线播放 | 黄色av免费电影 | 国产成人三级在线观看 | 成人高清在线观看 | 国产97在线播放 | 国产清纯在线 | 在线观看成人毛片 | 97品白浆高清久久久久久 | 成人性生交视频 | 91最新视频在线观看 | 亚洲综合五月天 | 久久a v视频| 久久免费视频在线观看6 | 丁香久久婷婷 | 婷婷色在线播放 | 色五月成人 | 亚洲在线资源 | 丁香视频五月 | avwww在线观看| 在线观看国产一区 | 亚洲va欧美va国产va黑人 | 黄色片网站大全 | 在线影院中文字幕 | 99精品免费久久久久久日本 | 91完整版 | 视频在线精品 | 四虎影视国产精品免费久久 | 国产色a在线观看 | 欧美福利在线播放 | 色综合久久综合中文综合网 | 一级做a爱片性色毛片www | 天天操天天舔天天爽 | 婷婷色中文网 | 亚洲精品福利在线观看 | 狠狠躁日日躁狂躁夜夜躁 | 美女视频黄免费网站 | 中文字幕一区二区三区在线观看 | 国产黄在线观看 | 最新三级在线 | 国产精品自产拍在线观看网站 | 91丨九色丨91啦蝌蚪老版 | 蜜桃av久久久亚洲精品 | 欧美一级片在线 | 91在线视频免费91 | 久久精品中文字幕少妇 | 色资源网免费观看视频 | 欧美久久久久 | 69国产盗摄一区二区三区五区 | 最新99热 | 日本黄色大片免费看 | 久久都是精品 | 亚洲欧美日韩国产 | 国产麻豆精品久久一二三 | 日日碰狠狠躁久久躁综合网 | 一区二区三区在线观看 | 亚洲精品久久在线 | 欧美aaa大片 | 天天草av | 久草在线视频在线 | 久久久午夜精品理论片中文字幕 | 精品久久1 | 日韩免费电影 | 91精品国产一区二区在线观看 | 丰满少妇在线观看网站 | 色婷婷视频 | 激情五月看片 | 在线观看激情av | 日日操操| 香蕉视频在线视频 | 亚洲国产精品成人女人久久 | 欧美精品在线观看免费 | 欧美一区二区在线免费看 | 天天干天天玩天天操 | 亚洲 综合 专区 | 米奇四色影视 | 亚洲另类视频在线观看 | 开心色激情网 | 日韩欧美在线免费观看 | 成人午夜精品 | 久色网| www.天天操.com | 97精品国产91久久久久久 | 欧美日韩色婷婷 | 一区二区三区免费网站 | japanesexxxxfreehd乱熟 | 99超碰在线观看 | 婷婷深爱五月 | av网站在线观看免费 | 色五月色开心色婷婷色丁香 | av免费在线播放 | 久久综合亚洲鲁鲁五月久久 | 国产91在线观 | 激情av网| 国产色中涩 | 又粗又长又大又爽又黄少妇毛片 | 久久亚洲热 | 欧美久久久久久久久中文字幕 | 国产日韩欧美精品在线观看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产精品白虎 | 免费黄色a级毛片 | 亚洲狠狠婷婷综合久久久 | 91精品国自产在线偷拍蜜桃 | 免费黄色网址网站 | 日韩电影在线看 | 国产精品高清在线观看 | 麻豆视频成人 | 成片免费观看视频大全 | 久久久久久久av麻豆果冻 | 亚洲精品视频在线免费 | 精品久久99 | 色婷婷成人网 | 99婷婷狠狠成为人免费视频 | 日韩欧美一区二区在线 | 黄色av网站在线免费观看 | 美女一级毛片视频 | 久久激情小说 | 99精品国产一区二区三区不卡 | 麻豆精品在线 | 伊人婷婷综合 | 久久男人中文字幕资源站 | 国产成人精品一区二区 | 91日韩在线 | 成人九九视频 | 成人黄色在线观看视频 | 三级av网站| 国产日韩视频在线 | 色午夜影院 | 日韩av成人在线观看 | 精品久久精品久久 | 在线免费看片 | 香蕉影院在线观看 | 中文字幕一区二区三区视频 | 日本在线中文在线 | 91福利视频免费观看 | 亚洲一区动漫 | 国产91欧美| 免费看的黄色片 | 99热这里只有精品免费 | 成人欧美一区二区三区在线观看 | 国产精品美女久久久久久久久久久 | www.黄色片网站 | 在线观看视频在线观看 | 免费av片在线| 亚洲欧美日韩精品久久久 | 欧美精品少妇xxxxx喷水 | 免费观看日韩av | 久久国色夜色精品国产 | 国模精品在线 | 91最新视频在线观看 | 国产精品视频你懂的 | 久久精品国产99国产 | 91黄色在线视频 | 久草视频在线播放 | 亚洲国产mv | 免费福利视频导航 | 丁香亚洲| 天天拍天天操 | 一本一本久久a久久精品牛牛影视 | 麻豆视频国产 | 热久久免费视频 | 亚洲精品久久久蜜臀下载官网 | 免费在线国产 | 成人在线视频一区 | 在线影院av| 欧美性护士| 91亚色视频在线观看 | 丁香九月激情综合 | 免费看片日韩 | 九草在线视频 | japanese黑人亚洲人4k | 国产电影一区二区三区四区 | 91视频在线观看免费 | 久久xx视频 | 国产精品男女 | 亚洲国产字幕 | 欧美日韩有码 | 国产在线视频在线观看 |