精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在數(shù)據(jù)科學(xué)中使用 C 和 C++

大數(shù)據(jù) 后端
我在一篇涉及 Python 和 GNU Octave 的文章中寫了我不斷學(xué)習(xí)編程語(yǔ)言的動(dòng)機(jī),值得大家回顧。這里所有的程序都需要在命令行上運(yùn)行,而不是在圖形用戶界面(GUI)上運(yùn)行。完整的示例可在 polyglot_fit 存儲(chǔ)庫(kù)中找到。

讓我們使用 C99 和 C++11 完成常見的數(shù)據(jù)科學(xué)任務(wù)。

雖然 Python 和 R 之類的語(yǔ)言在數(shù)據(jù)科學(xué)中越來(lái)越受歡迎,但是 C 和 C++ 對(duì)于高效的數(shù)據(jù)科學(xué)來(lái)說(shuō)是一個(gè)不錯(cuò)的選擇。在本文中,我們將使用 C99 和 C++11 編寫一個(gè)程序,該程序使用 Anscombe 的四重奏數(shù)據(jù)集,下面將對(duì)其進(jìn)行解釋。

我在一篇涉及 Python 和 GNU Octave 的文章中寫了我不斷學(xué)習(xí)編程語(yǔ)言的動(dòng)機(jī),值得大家回顧。這里所有的程序都需要在命令行上運(yùn)行,而不是在圖形用戶界面(GUI)上運(yùn)行。完整的示例可在 polyglot_fit 存儲(chǔ)庫(kù)中找到。

編程任務(wù)

你將在本系列中編寫的程序:

  • 從 CSV 文件中讀取數(shù)據(jù)
  • 用直線插值數(shù)據(jù)(即 f(x)=m ⋅ x + q)
  • 將結(jié)果繪制到圖像文件

這是許多數(shù)據(jù)科學(xué)家遇到的普遍情況。示例數(shù)據(jù)是 Anscombe 的四重奏的第一組,如下表所示。這是一組人工構(gòu)建的數(shù)據(jù),當(dāng)擬合直線時(shí)可以提供相同的結(jié)果,但是它們的曲線非常不同。數(shù)據(jù)文件是一個(gè)文本文件,其中的制表符用作列分隔符,前幾行作為標(biāo)題。該任務(wù)將僅使用第一組(即前兩列)。

在數(shù)據(jù)科學(xué)中使用 C 和 C++

C 語(yǔ)言的方式

C 語(yǔ)言是通用編程語(yǔ)言,是當(dāng)今使用最廣泛的語(yǔ)言之一(依據(jù) TIOBE 指數(shù)、RedMonk 編程語(yǔ)言排名、編程語(yǔ)言流行度指數(shù)和 GitHub Octoverse 狀態(tài) 得來(lái))。這是一種相當(dāng)古老的語(yǔ)言(大約誕生在 1973 年),并且用它編寫了許多成功的程序(例如 Linux 內(nèi)核和 Git 僅是其中的兩個(gè)例子)。它也是最接近計(jì)算機(jī)內(nèi)部運(yùn)行機(jī)制的語(yǔ)言之一,因?yàn)樗苯佑糜诓僮鲀?nèi)存。它是一種編譯語(yǔ)言;因此,源代碼必須由編譯器轉(zhuǎn)換為機(jī)器代碼。它的標(biāo)準(zhǔn)庫(kù)很小,功能也不多,因此人們開發(fā)了其它庫(kù)來(lái)提供缺少的功能。

我最常在數(shù)字運(yùn)算中使用該語(yǔ)言,主要是因?yàn)槠湫阅堋N矣X(jué)得使用起來(lái)很繁瑣,因?yàn)樗枰芏鄻影宕a,但是它在各種環(huán)境中都得到了很好的支持。C99 標(biāo)準(zhǔn)是最新版本,增加了一些漂亮的功能,并且得到了編譯器的良好支持。

我將一路介紹 C 和 C++ 編程的必要背景,以便初學(xué)者和高級(jí)用戶都可以繼續(xù)學(xué)習(xí)。

安裝

要使用 C99 進(jìn)行開發(fā),你需要一個(gè)編譯器。我通常使用 Clang,不過(guò) GCC 是另一個(gè)有效的開源編譯器。對(duì)于線性擬合,我選擇使用 GNU 科學(xué)庫(kù)。對(duì)于繪圖,我找不到任何明智的庫(kù),因此該程序依賴于外部程序:Gnuplot。該示例還使用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)數(shù)據(jù),該結(jié)構(gòu)在伯克利軟件分發(fā)版(BSD)中定義。

在 Fedora 中安裝很容易:

  1. sudo dnf install clang gnuplot gsl gsl-devel 

代碼注釋

在 C99 中,注釋的格式是在行的開頭放置 //,行的其它部分將被解釋器丟棄。另外,/* 和 */ 之間的任何內(nèi)容也將被丟棄。

  1. // 這是一個(gè)注釋,會(huì)被解釋器忽略 
  2. /* 這也被忽略 */ 

必要的庫(kù)

庫(kù)由兩部分組成:

  • 頭文件,其中包含函數(shù)說(shuō)明
  • 包含函數(shù)定義的源文件

頭文件包含在源文件中,而庫(kù)文件的源文件則鏈接到可執(zhí)行文件。因此,此示例所需的頭文件是:

  1. // 輸入/輸出功能 
  2. #include <stdio.h> 
  3. // 標(biāo)準(zhǔn)庫(kù) 
  4. #include <stdlib.h> 
  5. // 字符串操作功能 
  6. #include <string.h> 
  7. // BSD 隊(duì)列 
  8. #include <sys/queue.h> 
  9. // GSL 科學(xué)功能 
  10. #include <gsl/gsl_fit.h> 
  11. #include <gsl/gsl_statistics_double.h> 

主函數(shù)

在 C 語(yǔ)言中,程序必須位于稱為主函數(shù) main() 的特殊函數(shù)內(nèi):

  1. int main(void) { 
  2.     ... 

這與上一教程中介紹的 Python 不同,后者將運(yùn)行在源文件中找到的所有代碼。

定義變量

在 C 語(yǔ)言中,變量必須在使用前聲明,并且必須與類型關(guān)聯(lián)。每當(dāng)你要使用變量時(shí),都必須決定要在其中存儲(chǔ)哪種數(shù)據(jù)。你也可以指定是否打算將變量用作常量值,這不是必需的,但是編譯器可以從此信息中受益。 以下來(lái)自存儲(chǔ)庫(kù)中的 fitting_C99.c 程序:

  1. const char *input_file_name = "anscombe.csv"
  2. const char *delimiter = "\t"
  3. const unsigned int skip_header = 3; 
  4. const unsigned int column_x = 0; 
  5. const unsigned int column_y = 1; 
  6. const char *output_file_name = "fit_C99.csv"
  7. const unsigned int N = 100; 

C 語(yǔ)言中的數(shù)組不是動(dòng)態(tài)的,從某種意義上說(shuō),數(shù)組的長(zhǎng)度必須事先確定(即,在編譯之前):

  1. int data_array[1024]; 

由于你通常不知道文件中有多少個(gè)數(shù)據(jù)點(diǎn),因此請(qǐng)使用單鏈列表。這是一個(gè)動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),可以無(wú)限增長(zhǎng)。幸運(yùn)的是,BSD 提供了鏈表。這是一個(gè)示例定義:

  1. struct data_point { 
  2.     double x; 
  3.     double y; 
  4.     SLIST_ENTRY(data_point) entries; 
  5. }; 
  6. SLIST_HEAD(data_list, data_point) head = SLIST_HEAD_INITIALIZER(head); 
  7. SLIST_INIT(&head); 

該示例定義了一個(gè)由結(jié)構(gòu)化值組成的 data_point 列表,該結(jié)構(gòu)化值同時(shí)包含 x 值和 y 值。語(yǔ)法相當(dāng)復(fù)雜,但是很直觀,詳細(xì)描述它就會(huì)太冗長(zhǎng)了。

打印輸出

要在終端上打印,可以使用 printf() 函數(shù),其功能類似于 Octave 的 printf() 函數(shù)(在第一篇文章中介紹):

  1. printf("#### Anscombe's first set with C99 ####\n"); 

printf() 函數(shù)不會(huì)在打印字符串的末尾自動(dòng)添加換行符,因此你必須添加換行符。第一個(gè)參數(shù)是一個(gè)字符串,可以包含傳遞給函數(shù)的其他參數(shù)的格式信息,例如:

  1. printf("Slope: %f\n", slope); 

讀取數(shù)據(jù)

現(xiàn)在來(lái)到了困難的部分……有一些用 C 語(yǔ)言解析 CSV 文件的庫(kù),但是似乎沒(méi)有一個(gè)庫(kù)足夠穩(wěn)定或流行到可以放入到 Fedora 軟件包存儲(chǔ)庫(kù)中。我沒(méi)有為本教程添加依賴項(xiàng),而是決定自己編寫此部分。同樣,討論這些細(xì)節(jié)太啰嗦了,所以我只會(huì)解釋大致的思路。為了簡(jiǎn)潔起見,將忽略源代碼中的某些行,但是你可以在存儲(chǔ)庫(kù)中找到完整的示例代碼。

首先,打開輸入文件:

  1. FILE* input_file = fopen(input_file_name, "r"); 

然后逐行讀取文件,直到出現(xiàn)錯(cuò)誤或文件結(jié)束:

  1. while (!ferror(input_file) && !feof(input_file)) { 
  2.     size_t buffer_size = 0; 
  3.     char *buffer = NULL
  4.     
  5.     getline(&buffer, &buffer_size, input_file); 
  6.     ... 

getline() 函數(shù)是 POSIX.1-2008 標(biāo)準(zhǔn)新增的一個(gè)不錯(cuò)的函數(shù)。它可以讀取文件中的整行,并負(fù)責(zé)分配必要的內(nèi)存。然后使用 strtok() 函數(shù)將每一行分成字元token。遍歷字元,選擇所需的列:

  1. char *token = strtok(buffer, delimiter); 
  2. while (token != NULL
  3.     double value; 
  4.     sscanf(token, "%lf", &value); 
  5.     if (column == column_x) { 
  6.         x = value; 
  7.     } else if (column == column_y) { 
  8.         y = value; 
  9.     } 
  10.     column += 1; 
  11.     token = strtok(NULL, delimiter); 

最后,當(dāng)選擇了 x 和 y 值時(shí),將新數(shù)據(jù)點(diǎn)插入鏈表中:

  1. struct data_point *datum = malloc(sizeof(struct data_point)); 
  2. datum->x = x; 
  3. datum->y = y; 
  4. SLIST_INSERT_HEAD(&head, datum, entries); 

malloc() 函數(shù)為新數(shù)據(jù)點(diǎn)動(dòng)態(tài)分配(保留)一些持久性內(nèi)存。

擬合數(shù)據(jù)

GSL 線性擬合函數(shù) gslfitlinear() 期望其輸入為簡(jiǎn)單數(shù)組。因此,由于你將不知道要?jiǎng)?chuàng)建的數(shù)組的大小,因此必須手動(dòng)分配它們的內(nèi)存:

  1. const size_t entries_number = row - skip_header - 1; 
  2. double *x = malloc(sizeof(double) * entries_number); 
  3. double *y = malloc(sizeof(double) * entries_number); 

然后,遍歷鏈表以將相關(guān)數(shù)據(jù)保存到數(shù)組:

  1. SLIST_FOREACH(datum, &head, entries) { 
  2.     const double current_x = datum->x; 
  3.     const double current_y = datum->y; 
  4.     x[i] = current_x; 
  5.     y[i] = current_y; 
  6.     i += 1; 

現(xiàn)在你已經(jīng)處理完了鏈表,請(qǐng)清理它。要總是釋放已手動(dòng)分配的內(nèi)存,以防止內(nèi)存泄漏。內(nèi)存泄漏是糟糕的、糟糕的、糟糕的(重要的話說(shuō)三遍)。每次內(nèi)存沒(méi)有釋放時(shí),花園侏儒都會(huì)找不到自己的頭:

  1. while (!SLIST_EMPTY(&head)) { 
  2.     struct data_point *datum = SLIST_FIRST(&head); 
  3.     SLIST_REMOVE_HEAD(&head, entries); 
  4.     free(datum); 

終于,終于!你可以擬合你的數(shù)據(jù)了:

  1. gsl_fit_linear(x, 1, y, 1, entries_number, 
  2.                &intercept, &slope, 
  3.                &cov00, &cov01, &cov11, &chi_squared); 
  4. const double r_value = gsl_stats_correlation(x, 1, y, 1, entries_number); 
  5. printf("Slope: %f\n", slope); 
  6. printf("Intercept: %f\n", intercept); 
  7. printf("Correlation coefficient: %f\n", r_value); 

繪圖

你必須使用外部程序進(jìn)行繪圖。因此,將擬合數(shù)據(jù)保存到外部文件:

  1. const double step_x = ((max_x + 1) - (min_x - 1)) / N; 
  2. for (unsigned int i = 0; i < N; i += 1) { 
  3.     const double current_x = (min_x - 1) + step_x * i; 
  4.     const double current_y = intercept + slope * current_x; 
  5.     fprintf(output_file, "%f\t%f\n", current_x, current_y); 

用于繪制兩個(gè)文件的 Gnuplot 命令是:

  1. plot 'fit_C99.csv' using 1:2 with lines title 'Fit''anscombe.csv' using 1:2 with points pointtype 7 title 'Data' 

結(jié)果

在運(yùn)行程序之前,你必須編譯它:

  1. clang -std=c99 -I/usr/include/ fitting_C99.c -L/usr/lib/ -L/usr/lib64/ -lgsl -lgslcblas -o fitting_C99 

這個(gè)命令告訴編譯器使用 C99 標(biāo)準(zhǔn)、讀取 fitting_C99.c 文件、加載 gsl 和 gslcblas 庫(kù)、并將結(jié)果保存到 fitting_C99。命令行上的結(jié)果輸出為:

  1. #### Anscombe's first set with C99 #### 
  2. Slope: 0.500091 
  3. Intercept: 3.000091 
  4. Correlation coefficient: 0.816421 

這是用 Gnuplot 生成的結(jié)果圖像:

在數(shù)據(jù)科學(xué)中使用 C 和 C++

C++11 方式

C++ 語(yǔ)言是一種通用編程語(yǔ)言,也是當(dāng)今使用的最受歡迎的語(yǔ)言之一。它是作為 C 的繼承人創(chuàng)建的(誕生于 1983 年),重點(diǎn)是面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)。C++ 通常被視為 C 的超集,因此 C 程序應(yīng)該能夠使用 C++ 編譯器進(jìn)行編譯。這并非完全正確,因?yàn)樵谀承O端情況下它們的行為有所不同。 根據(jù)我的經(jīng)驗(yàn),C++ 與 C 相比需要更少的樣板代碼,但是如果要進(jìn)行面向?qū)ο箝_發(fā),語(yǔ)法會(huì)更困難。C++11 標(biāo)準(zhǔn)是最新版本,增加了一些漂亮的功能,并且基本上得到了編譯器的支持。

由于 C++ 在很大程度上與 C 兼容,因此我將僅強(qiáng)調(diào)兩者之間的區(qū)別。我在本部分中沒(méi)有涵蓋的任何部分,則意味著它與 C 中的相同。

安裝

這個(gè) C++ 示例的依賴項(xiàng)與 C 示例相同。 在 Fedora 上,運(yùn)行:

  1. sudo dnf install clang gnuplot gsl gsl-devel 

必要的庫(kù)

庫(kù)的工作方式與 C 語(yǔ)言相同,但是 include 指令略有不同:

  1. #include <cstdlib> 
  2. #include <cstring> 
  3. #include <iostream> 
  4. #include <fstream> 
  5. #include <string> 
  6. #include <vector> 
  7. #include <algorithm> 
  8. extern "C" { 
  9. #include <gsl/gsl_fit.h> 
  10. #include <gsl/gsl_statistics_double.h> 

由于 GSL 庫(kù)是用 C 編寫的,因此你必須將這個(gè)特殊情況告知編譯器。

定義變量

與 C 語(yǔ)言相比,C++ 支持更多的數(shù)據(jù)類型(類),例如,與其 C 語(yǔ)言版本相比,string 類型具有更多的功能。相應(yīng)地更新變量的定義:

  1. const std::string input_file_name("anscombe.csv"); 

對(duì)于字符串之類的結(jié)構(gòu)化對(duì)象,你可以定義變量而無(wú)需使用 = 符號(hào)。

打印輸出

你可以使用 printf() 函數(shù),但是 cout 對(duì)象更慣用。使用運(yùn)算符 << 來(lái)指示要使用 cout 打印的字符串(或?qū)ο?:

  1. std::cout << "#### Anscombe's first set with C++11 ####" << std::endl; 
  2. ... 
  3. std::cout << "Slope: " << slope << std::endl; 
  4. std::cout << "Intercept: " << intercept << std::endl; 
  5. std::cout << "Correlation coefficient: " << r_value << std::endl; 

讀取數(shù)據(jù)

該方案與以前相同。將打開文件并逐行讀取文件,但語(yǔ)法不同:

  1. std::ifstream input_file(input_file_name); 
  2. while (input_file.good()) { 
  3.     std::string line; 
  4.     getline(input_file, line); 
  5.     ... 

使用與 C99 示例相同的功能提取行字元。代替使用標(biāo)準(zhǔn)的 C 數(shù)組,而是使用兩個(gè)向量。向量是 C++ 標(biāo)準(zhǔn)庫(kù)中對(duì) C 數(shù)組的擴(kuò)展,它允許動(dòng)態(tài)管理內(nèi)存而無(wú)需顯式調(diào)用 malloc():

  1. std::vector<double> x; 
  2. std::vector<double> y; 
  3. // Adding an element to x and y: 
  4. x.emplace_back(value); 
  5. y.emplace_back(value); 

擬合數(shù)據(jù)

要在 C++ 中擬合,你不必遍歷列表,因?yàn)橄蛄靠梢员WC具有連續(xù)的內(nèi)存。你可以將向量緩沖區(qū)的指針直接傳遞給擬合函數(shù):

  1. gsl_fit_linear(x.data(), 1, y.data(), 1, entries_number, 
  2.                &intercept, &slope, 
  3.                &cov00, &cov01, &cov11, &chi_squared); 
  4. const double r_value = gsl_stats_correlation(x.data(), 1, y.data(), 1, entries_number); 
  5. std::cout << "Slope: " << slope << std::endl; 
  6. std::cout << "Intercept: " << intercept << std::endl; 
  7. std::cout << "Correlation coefficient: " << r_value << std::endl; 

繪圖

使用與以前相同的方法進(jìn)行繪圖。 寫入文件:

  1. const double step_x = ((max_x + 1) - (min_x - 1)) / N; 
  2. for (unsigned int i = 0; i < N; i += 1) { 
  3.     const double current_x = (min_x - 1) + step_x * i; 
  4.     const double current_y = intercept + slope * current_x; 
  5.     output_file << current_x << "\t" << current_y << std::endl; 
  6. output_file.close(); 

然后使用 Gnuplot 進(jìn)行繪圖。

結(jié)果

在運(yùn)行程序之前,必須使用類似的命令對(duì)其進(jìn)行編譯:

  1. clang++ -std=c++11 -I/usr/include/ fitting_Cpp11.cpp -L/usr/lib/ -L/usr/lib64/ -lgsl -lgslcblas -o fitting_Cpp11 

命令行上的結(jié)果輸出為:

  1. #### Anscombe's first set with C++11 #### 
  2. Slope: 0.500091 
  3. Intercept: 3.00009 
  4. Correlation coefficient: 0.816421 

這就是用 Gnuplot 生成的結(jié)果圖像:

在數(shù)據(jù)科學(xué)中使用 C 和 C++

結(jié)論

本文提供了用 C99 和 C++11 編寫的數(shù)據(jù)擬合和繪圖任務(wù)的示例。由于 C++ 在很大程度上與 C 兼容,因此本文利用了它們的相似性來(lái)編寫了第二個(gè)示例。在某些方面,C++ 更易于使用,因?yàn)樗糠譁p輕了顯式管理內(nèi)存的負(fù)擔(dān)。但是其語(yǔ)法更加復(fù)雜,因?yàn)樗肓藶? OOP 編寫類的可能性。但是,仍然可以用 C 使用 OOP 方法編寫軟件。由于 OOP 是一種編程風(fēng)格,因此可以在任何語(yǔ)言中使用。在 C 中有一些很好的 OOP 示例,例如 GObject 和 Jansson庫(kù)。

對(duì)于數(shù)字運(yùn)算,我更喜歡在 C99 中進(jìn)行,因?yàn)樗恼Z(yǔ)法更簡(jiǎn)單并且得到了廣泛的支持。直到最近,C++11 還沒(méi)有得到廣泛的支持,我傾向于避免使用先前版本中的粗糙不足之處。對(duì)于更復(fù)雜的軟件,C++ 可能是一個(gè)不錯(cuò)的選擇。

你是否也將 C 或 C++ 用于數(shù)據(jù)科學(xué)?在評(píng)論中分享你的經(jīng)驗(yàn)。

責(zé)任編輯:未麗燕 來(lái)源: Linux.cn
相關(guān)推薦

2011-05-18 18:05:47

C#C++

2011-05-18 17:56:38

C#C++

2011-05-12 18:14:29

算法

2011-05-17 16:20:46

C++

2011-03-30 10:41:11

C++數(shù)據(jù)庫(kù)

2012-08-20 10:43:50

IBMdW

2010-01-26 15:51:06

C++變量

2016-08-31 16:39:59

PythonRC++

2009-04-14 14:53:06

C++Lambda函數(shù)多線程

2020-07-30 12:40:35

CC++編程語(yǔ)言

2009-08-19 10:09:21

C#和C++

2011-04-11 09:43:25

C++C

2021-02-26 10:41:59

C++程序員代碼

2020-08-18 08:09:55

Docker容器工具

2010-01-27 15:58:35

C++數(shù)據(jù)結(jié)構(gòu)

2024-05-15 16:01:04

C++編程開發(fā)

2011-05-19 09:53:33

數(shù)據(jù)庫(kù)對(duì)象

2011-07-14 17:45:06

CC++

2010-01-20 09:54:27

C++數(shù)據(jù)類型

2009-09-04 17:34:11

C#CC++
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产不卡一二三区| 在线观看 中文字幕| 久久黄色精品视频| xxxx日韩| 91福利小视频| dy888午夜| 性xxxx视频播放免费| 日本91福利区| 久久久中精品2020中文| 精品无码国产污污污免费网站| h网站在线免费观看| 精品一区二区在线播放| 97精品欧美一区二区三区| 国产性猛交xx乱| 豆花视频一区二区| 欧美日韩一区二区在线观看视频 | 成人综合婷婷国产精品久久蜜臀 | 国产高清精品一区| 中文字幕在线播| 午夜国产精品视频| 亚洲欧美中文另类| 色欲无码人妻久久精品| 素人啪啪色综合| 午夜欧美一区二区三区在线播放| 国产精品午夜av在线| 中文字幕欧美色图| 在线视频精品| 欧美黑人国产人伦爽爽爽| 久久视频精品在线观看| 天堂成人娱乐在线视频免费播放网站 | 国产麻豆视频在线观看| 妖精视频一区二区三区| 日韩欧美一二区| 天堂av2020| 成人在线视频观看| 色综合久久88色综合天天6| 欧美日韩激情四射| 成人av免费| 国产精品麻豆一区二区| 日本精品二区| 外国精品视频在线观看| 99re成人在线| 国内精品一区二区| 亚洲精品综合久久| 国产精品一卡二卡| 亚洲自拍另类欧美丝袜| 国产又粗又猛又爽又黄91| 免费黄网站欧美| 国产精品久久久久久av福利| 免费看日批视频| 麻豆精品网站| 日韩免费精品视频| 免费黄色片视频| 日韩av在线播放中文字幕| 国产不卡精品视男人的天堂 | 亚洲3atv精品一区二区三区| 成人午夜免费剧场| 直接在线观看的三级网址| 亚洲同性gay激情无套| 综合操久久久| www红色一片_亚洲成a人片在线观看_| 成人夜色视频网站在线观看| 超碰在线观看97| 少妇人妻精品一区二区三区| 99久久综合色| 欧美激情一区二区三区在线视频 | 我爱我色成人网| 欧美性xxxx在线播放| 妓院一钑片免看黄大片| 国产精品亚洲成在人线| 欧美男人的天堂一二区| www.色.com| 国产精品高潮呻吟久久久久| 日韩经典一区二区三区| 日本性高潮视频| 国产韩国精品一区二区三区| 欧美人成在线视频| 日韩 欧美 综合| 久久久久国产精品午夜一区| 国产精品永久免费视频| 国产浮力第一页| 波多野结衣在线一区| 免费国产一区| 999在线视频| 亚洲精品欧美激情| 男人日女人bb视频| 日韩久久一区| 精品国产污污免费网站入口| 人人妻人人藻人人爽欧美一区| 亚洲不卡在线| 日韩国产精品视频| 日韩av片在线免费观看| 在线观看亚洲| 国产精品igao视频| 亚洲av无码专区在线| 久久久久久亚洲综合影院红桃| 国产精品国产一区二区| 色播色播色播色播色播在线| 国产精品久久久久久久第一福利| 日韩精品无码一区二区三区| 大片免费在线看视频| 精品国产精品三级精品av网址| 日韩视频一二三| 亚洲国产欧美日本视频| 91精品国产91久久久久久一区二区| 午夜视频你懂的| 在线视频亚洲欧美中文| 色综合伊人色综合网| 日本五十路女优| 久久91精品国产91久久小草| 蜜桃传媒视频麻豆第一区免费观看| 天堂网在线播放| 亚洲图片激情小说| 精品免费国产一区二区| 成人在线视频你懂的| 日韩网站免费观看高清| 久久久黄色大片| 国产91在线看| 红桃一区二区三区| 91成人抖音| 亚洲免费视频网站| 日本特黄特色aaa大片免费| 国内精品免费**视频| 日韩欧美亚洲v片| 亚洲电影观看| 亚洲国产精品人久久电影| 四虎884aa成人精品| 日本亚洲最大的色成网站www| 成人黄色av网| 国产片在线观看| 欧美色图在线视频| 中文字幕18页| 欧美日韩国产精品一区二区亚洲| 欧美精品福利视频| 99精品人妻无码专区在线视频区| 成人爽a毛片一区二区免费| 亚洲日本欧美在线| 精品69视频一区二区三区| 国产丝袜精品视频| 国产精品黄色网| 成人免费黄色大片| www.日本在线视频| 2023国产精华国产精品| 久久91亚洲精品中文字幕奶水| 免费日韩一级片| 风间由美性色一区二区三区| 日韩中文字幕在线不卡| 免费一级欧美在线大片| 欧美成人亚洲成人日韩成人| 国产丰满美女做爰| 亚洲一区免费在线观看| 久久久久国产免费| 亚洲高清成人| 欧美理论一区二区| 偷拍自拍在线看| 亚洲女人被黑人巨大进入| 国产精品777777| 国产午夜精品美女毛片视频| 国产wwwxx| 国产精品99一区二区三| 91综合免费在线| 亚洲国产精品精华素| 日韩三级免费观看| 色网站在线播放| 久久久久久电影| 九九精品久久久| 欧美jjzz| 久久精品人成| 日韩不卡免费高清视频| 最近2019年手机中文字幕| 国产精品久久久久久久成人午夜| 国产午夜精品一区二区三区四区 | 亚洲在线电影| 欧美日韩综合精品| 日韩av懂色| 欧美高清无遮挡| 你懂得在线网址| 欧美日韩在线不卡| 永久免费看片视频教学| 国产精品一区不卡| 黄色网页免费在线观看| 日韩精品一卡| 国产精品国产精品| 欧美极品免费| 色综合91久久精品中文字幕| 天堂资源中文在线| 欧美精品在线视频| 日本熟伦人妇xxxx| 国产精品久久久久久久久动漫| 国产视频在线视频| 久久久久久久久久久妇女| 国产精品区一区二区三含羞草| 免费av网站在线看| 欧美精品一区二区精品网| 波多野结衣家庭主妇| 日韩理论片一区二区| 亚洲国产欧美视频| 九九九久久久精品| 欧美 丝袜 自拍 制服 另类| 国产精品久久久久久影院8一贰佰| 国产精品免费在线免费| 国产嫩草在线视频| 神马国产精品影院av| 国产综合视频在线| 69成人精品免费视频| 久草视频在线观| 洋洋av久久久久久久一区| 午夜时刻免费入口| 成人av电影免费观看| 日本77777| 久久亚洲精选| 老太脱裤子让老头玩xxxxx| 成人影院在线| 欧美一区1区三区3区公司 | 91精品国产综合久久久蜜臀粉嫩 | 免费成人av电影| 日韩欧美一级特黄在线播放| 日本三级一区二区三区| 精品高清一区二区三区| 久久精品久久精品久久| 欧美午夜一区| 精品免费日韩av| 免费视频一二三区| 久久人人97超碰com| 日本在线不卡一区二区| 国产乱子伦一区二区三区国色天香 | 精品久久久久久亚洲综合网站| 一级做a爱片久久| 蜜桃av免费在线观看| 91免费国产视频网站| 亚洲成年人av| 成人永久看片免费视频天堂| 日本在线观看视频一区| 美女爽到高潮91| 日日躁夜夜躁aaaabbbb| 青椒成人免费视频| 国产欧美高清在线| 亚洲欧美日韩专区| 男人亚洲天堂网| 亚洲女人av| 日本wwww视频| 欧美一区=区| 日韩免费视频播放| 亚洲一区图片| 精品国产免费av| 久久青草久久| 亚洲精品高清无码视频| 日韩制服丝袜av| 污污的网站18| 久久精品国产一区二区三| 爱情岛论坛亚洲首页入口章节| 欧美日韩在线大尺度| 无码毛片aaa在线| 91精品精品| 免费看黄色a级片| 91久久视频| 久久精品午夜福利| 日本成人中文字幕| 在线不卡一区二区三区| 激情综合网av| 第一页在线视频| 97se亚洲国产综合在线| 偷拍女澡堂一区二区三区| 国产亚洲欧美中文| 午夜国产福利视频| 伊人婷婷欧美激情| 精品在线播放视频| 欧美中文字幕亚洲一区二区va在线 | 亚洲一区二区图片| 国产精品亚洲一区二区三区妖精| 日本免费一级视频| 琪琪一区二区三区| 中文av字幕在线观看| 国产经典欧美精品| 少妇户外露出[11p]| 久久精品一级爱片| 韩国一级黄色录像| 一区二区三区欧美视频| 国产午夜免费福利| 欧美乱妇一区二区三区不卡视频| 亚洲天堂一区在线| 色爱区综合激月婷婷| 国产一区二区在线播放视频| 精品女同一区二区| 草碰在线视频| 欧美激情videos| 日韩新的三级电影| 成人天堂噜噜噜| 日韩精品福利一区二区三区| 亚洲成人自拍视频| 精品69视频一区二区三区Q| 99久久国产宗和精品1上映| 国产一区二区三区国产| 美女又爽又黄免费| 国产精品成人免费| 久久久久久久久影院| 精品视频1区2区3区| 天堂中文在线资源| 久久精品中文字幕一区| 中文字幕在线中文字幕在线中三区| 91wwwcom在线观看| 97久久中文字幕| 国产欧美在线一区二区| 天天影视综合| 男人透女人免费视频| 成人精品一区二区三区四区 | 欧美激情第6页| 日韩不卡在线| 国产精品国模大尺度私拍| 日韩在线视屏| 国产黄色特级片| 国产精品77777| 337人体粉嫩噜噜噜| 亚洲成av人影院| 成 人 黄 色 片 在线播放| 中文字幕亚洲综合| 成人欧美magnet| 久久国产精品99久久久久久丝袜| 网红女主播少妇精品视频| 永久免费在线看片视频| 日韩高清不卡一区二区| 黄色性生活一级片| 亚洲在线中文字幕| 国产草草影院ccyycom| 丝袜情趣国产精品| 日韩电影免费观看高清完整版| 国产精品最新在线观看| 一区二区三区四区在线看| 欧美日韩福利在线| 国产一二三精品| 韩国一级黄色录像| 欧美男生操女生| 性开放的欧美大片| 国产福利视频一区二区| 伊人久久大香线蕉| 日韩av高清在线看片| 成人综合婷婷国产精品久久免费| 成人免费毛片糖心| 欧美性高潮床叫视频| 青青久草在线| 午夜精品一区二区三区在线| av动漫精品一区二区| 300部国产真实乱| 国产二区国产一区在线观看| 9999热视频| 欧美成人伊人久久综合网| 91精选在线| 高清视频一区二区三区| 国内自拍一区| 91九色蝌蚪porny| 午夜精品视频一区| 日韩精品123| 国产成人精品一区二区| 精品久久国产| 中文字幕免费高清在线| 亚洲人成网站影音先锋播放| 99在线精品视频免费观看20| 欧美日韩国产91| 亚洲第一福利专区| 国产免费视频传媒| 中文字幕一区二区三区在线不卡| 日本五十熟hd丰满| 亚洲福利视频专区| 日韩精品99| 99亚洲精品视频| 国产91综合网| 在线观看 亚洲| 少妇高潮 亚洲精品| 欧美一区一区| 精品国产免费av| 国产精品乱人伦| www男人的天堂| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲视频一起| 欧美 国产 日本| 国产精品剧情在线亚洲| 亚洲黄色小说网| 2019中文字幕在线免费观看| 欧美三级美国一级| 亚洲视频在线不卡| 婷婷综合另类小说色区| 一级毛片视频在线| 国产精品视频免费一区| 丝袜亚洲精品中文字幕一区| 小泽玛利亚一区二区免费| 精品国产制服丝袜高跟| 97成人资源| 一区二区免费电影| 成人av网站免费观看| 中文字幕精品无码亚| 欧美激情视频在线观看| 伊人久久大香线蕉综合网站| 中文字幕久久av| 色综合久久久网| 成人影院www在线观看| 欧美日本韩国国产| 国产成人av一区| 伊人网中文字幕| 26uuu另类亚洲欧美日本一| 羞羞色午夜精品一区二区三区|