亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 操作矩陣的類 cmatrix.txt

?? 一個操作矩陣的類CMatrix的算法
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
////////////////////////////////////////////////////////////////////// 
// Matrix.cpp 
// 
// 操作矩陣的類 CMatrix 的實現文件 
// 
// 周長發編制, 2002/8 
////////////////////////////////////////////////////////////////////// 

#include "stdafx.h" 
#include "Matrix.h" 

#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 

////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 

////////////////////////////////////////////////////////////////////// 
// 基本構造函數 
////////////////////////////////////////////////////////////////////// 
CMatrix::CMatrix() 
{ 
m_nNumColumns = 1; 
m_nNumRows = 1; 
m_pData = NULL; 
BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); 
ASSERT(bSuccess); 
} 

////////////////////////////////////////////////////////////////////// 
// 指定行列構造函數 
// 
// 參數: 
// 1. int nRows - 指定的矩陣行數 
// 2. int nCols - 指定的矩陣列數 
////////////////////////////////////////////////////////////////////// 
CMatrix::CMatrix(int nRows, int nCols) 
{ 
m_nNumRows = nRows; 
m_nNumColumns = nCols; 
m_pData = NULL; 
BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); 
ASSERT(bSuccess); 
} 

////////////////////////////////////////////////////////////////////// 
// 指定值構造函數 
// 
// 參數: 
// 1. int nRows - 指定的矩陣行數 
// 2. int nCols - 指定的矩陣列數 
// 3. double value[] - 一維數組,長度為nRows*nCols,存儲矩陣各元素的值 
////////////////////////////////////////////////////////////////////// 
CMatrix::CMatrix(int nRows, int nCols, double value[]) 
{ 
m_nNumRows = nRows; 
m_nNumColumns = nCols; 
m_pData = NULL; 
BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); 
ASSERT(bSuccess); 

SetData(value); 
} 

////////////////////////////////////////////////////////////////////// 
// 方陣構造函數 
// 
// 參數: 
// 1. int nSize - 方陣行列數 
////////////////////////////////////////////////////////////////////// 
CMatrix::CMatrix(int nSize) 
{ 
m_nNumRows = nSize; 
m_nNumColumns = nSize; 
m_pData = NULL; 
BOOL bSuccess = Init(nSize, nSize); 
ASSERT (bSuccess); 
} 

////////////////////////////////////////////////////////////////////// 
// 方陣構造函數 
// 
// 參數: 
// 1. int nSize - 方陣行列數 
// 2. double value[] - 一維數組,長度為nRows*nRows,存儲方陣各元素的值 
////////////////////////////////////////////////////////////////////// 
CMatrix::CMatrix(int nSize, double value[]) 
{ 
m_nNumRows = nSize; 
m_nNumColumns = nSize; 
m_pData = NULL; 
BOOL bSuccess = Init(nSize, nSize); 
ASSERT (bSuccess); 

SetData(value); 
} 

////////////////////////////////////////////////////////////////////// 
// 拷貝構造函數 
// 
// 參數: 
// 1. const CMatrix& other - 源矩陣 
////////////////////////////////////////////////////////////////////// 
CMatrix::CMatrix(const CMatrix& other) 
{ 
m_nNumColumns = other.GetNumColumns(); 
m_nNumRows = other.GetNumRows(); 
m_pData = NULL; 
BOOL bSuccess = Init(m_nNumRows, m_nNumColumns); 
ASSERT(bSuccess); 

// copy the pointer 
memcpy(m_pData, other.m_pData, 
sizeof(double)*m_nNumColumns*m_nNumRows); 
} 

////////////////////////////////////////////////////////////////////// 
// 析構函數 
////////////////////////////////////////////////////////////////////// 
CMatrix::~CMatrix() 
{ 
if (m_pData) 
{ 
delete[] m_pData; 
m_pData = NULL; 
} 
} 

////////////////////////////////////////////////////////////////////// 
// 初始化函數 
// 
// 參數: 
// 1. int nRows - 指定的矩陣行數 
// 2. int nCols - 指定的矩陣列數 
// 
// 返回值:BOOL 型,初始化是否成功 
////////////////////////////////////////////////////////////////////// 
BOOL CMatrix::Init(int nRows, int nCols) 
{ 
if (m_pData) 
{ 
delete[] m_pData; 
m_pData = NULL; 
} 

m_nNumRows = nRows; 
m_nNumColumns = nCols; 
int nSize = nCols*nRows; 
if (nSize < 0) 
return FALSE; 

// 分配內存 
m_pData = new double[nSize]; 

if (m_pData == NULL) 
return FALSE; // 內存分配失敗 

if (IsBadReadPtr(m_pData, sizeof(double) * nSize)) 
return FALSE; 

// 將各元素值置0 
memset(m_pData, 0, sizeof(double) * nSize); 

return TRUE; 
} 

////////////////////////////////////////////////////////////////////// 
// 將方陣初始化為單位矩陣 
// 
// 參數: 
// 1. int nSize - 方陣行列數 
// 
// 返回值:BOOL 型,初始化是否成功 
////////////////////////////////////////////////////////////////////// 
BOOL CMatrix::MakeUnitMatrix(int nSize) 
{ 
if (! Init(nSize, nSize)) 
return FALSE; 

for (int i=0; i<nSize; ++i) 
for (int j=0; j<nSize; ++j) 
if (i == j) 
SetElement(i, j, 1); 

return TRUE; 
} 

////////////////////////////////////////////////////////////////////// 
// 將字符串轉化為矩陣的值 
// 
// 參數: 
// 1. CString s - 數字和分隔符構成的字符串 
// 2. const CString& sDelim - 數字之間的分隔符,默認為空格 
// 3. BOOL bLineBreak - 行與行之間是否有回車換行符,默認為真(有換行符) 
// 當該參數為FALSE時,所有元素值都在一行中輸入,字符串的第一個 
// 數值應為矩陣的行數,第二個數值應為矩陣的列數 
// 
// 返回值:BOOL 型,轉換是否成功 
////////////////////////////////////////////////////////////////////// 
BOOL CMatrix::FromString(CString s, const CString& sDelim /*= " "*/, BOOL 
bLineBreak /*= TRUE*/) 
{ 
if (s.IsEmpty()) 
return FALSE; 

// 分行處理 
if (bLineBreak) 
{ 
CTokenizer tk(s, "\r\n"); 

CStringList ListRow; 
CString sRow; 
while (tk.Next(sRow)) 
{ 
sRow.TrimLeft(); 
sRow.TrimRight(); 
if (sRow.IsEmpty()) 
break; 

ListRow.AddTail(sRow); 
} 

// 行數 
m_nNumRows = ListRow.GetCount(); 

sRow = ListRow.GetHead(); 
CTokenizer tkRow(sRow, sDelim); 
CString sElement; 
// 列數 
m_nNumColumns = 0; 
while (tkRow.Next(sElement)) 
{ 
m_nNumColumns++; 
} 

// 初始化矩陣 
if (! Init(m_nNumRows, m_nNumColumns)) 
return FALSE; 

// 設置值 
POSITION pos = ListRow.GetHeadPosition(); 
for (int i=0; i<m_nNumRows; i++) 
{ 
sRow = ListRow.GetNext(pos); 
int j = 0; 
CTokenizer tkRow(sRow, sDelim); 
while (tkRow.Next(sElement)) 
{ 
sElement.TrimLeft(); 
sElement.TrimRight(); 
double v = atof(sElement); 
SetElement(i, j++, v); 
} 
} 

return TRUE; 
} 

// 不分行(單行)處理 

CTokenizer tk(s, sDelim); 

CString sElement; 

// 行數 
tk.Next(sElement); 
sElement.TrimLeft(); 
sElement.TrimRight(); 
m_nNumRows = atoi(sElement); 

// 列數 
tk.Next(sElement); 
sElement.TrimLeft(); 
sElement.TrimRight(); 
m_nNumColumns = atoi(sElement); 

// 初始化矩陣 
if (! Init(m_nNumRows, m_nNumColumns)) 
return FALSE; 

// 設置值 
int i = 0, j = 0; 
while (tk.Next(sElement)) 
{ 
sElement.TrimLeft(); 
sElement.TrimRight(); 
double v = atof(sElement); 
SetElement(i, j++, v); 

if (j == m_nNumColumns) 
{ 
j = 0; 
i++; 
if (i == m_nNumRows) 
break; 
} 
} 

return TRUE; 
} 

////////////////////////////////////////////////////////////////////// 
// 將矩陣各元素的值轉化為字符串 
// 
// 參數: 
// 1. const CString& sDelim - 數字之間的分隔符,默認為空格 
// 2 BOOL bLineBreak - 行與行之間是否有回車換行符,默認為真(有換行符) 
// 
// 返回值:CString 型,轉換得到的字符串 
////////////////////////////////////////////////////////////////////// 
CString CMatrix::ToString(const CString& sDelim /*= " "*/, BOOL bLineBreak 
/*= TRUE*/) const 
{ 
CString s=""; 

for (int i=0; i<m_nNumRows; ++i) 
{ 
for (int j=0; j<m_nNumColumns; ++j) 
{ 
CString ss; 
ss.Format("%f", GetElement(i, j)); 
s += ss; 

if (bLineBreak) 
{ 
if (j != m_nNumColumns-1) 
s += sDelim; 
} 
else 
{ 
if (i != m_nNumRows-1 || j != m_nNumColumns-1) 
s += sDelim; 
} 
} 
if (bLineBreak) 
if (i != m_nNumRows-1) 
s += "\r\n"; 
} 

return s; 
} 

////////////////////////////////////////////////////////////////////// 
// 將矩陣指定行中各元素的值轉化為字符串 
// 
// 參數: 
// 1. int nRow - 指定的矩陣行,nRow = 0表示第一行 
// 2. const CString& sDelim - 數字之間的分隔符,默認為空格 
// 
// 返回值:CString 型,轉換得到的字符串 
////////////////////////////////////////////////////////////////////// 
CString CMatrix::RowToString(int nRow, const CString& sDelim /*= " "*/) const 
{ 
CString s = ""; 

if (nRow >= m_nNumRows) 
return s; 

for (int j=0; j<m_nNumColumns; ++j) 
{ 
CString ss; 
ss.Format("%f", GetElement(nRow, j)); 
s += ss; 
if (j != m_nNumColumns-1) 
s += sDelim; 
} 

return s; 
} 

////////////////////////////////////////////////////////////////////// 
// 將矩陣指定列中各元素的值轉化為字符串 
// 
// 參數: 
// 1. int nCol - 指定的矩陣行,nCol = 0表示第一列 
// 2. const CString& sDelim - 數字之間的分隔符,默認為空格 
// 
// 返回值:CString 型,轉換得到的字符串 
////////////////////////////////////////////////////////////////////// 
CString CMatrix::ColToString(int nCol, const CString& sDelim /*= " "*/) const 
{ 
CString s = ""; 

if (nCol >= m_nNumColumns) 
return s; 

for (int i=0; i<m_nNumRows; ++i) 
{ 
CString ss; 
ss.Format("%f", GetElement(i, nCol)); 
s += ss; 
if (i != m_nNumRows-1) 
s += sDelim; 
} 

return s; 
} 

////////////////////////////////////////////////////////////////////// 
// 設置矩陣各元素的值 
// 
// 參數: 
// 1. double value[] - 一維數組,長度為m_nNumColumns*m_nNumRows,存儲 
// 矩陣各元素的值 
// 
// 返回值:無 
////////////////////////////////////////////////////////////////////// 
void CMatrix::SetData(double value[]) 
{ 
// empty the memory 
memset(m_pData, 0, sizeof(double) * m_nNumColumns*m_nNumRows); 
// copy data 
memcpy(m_pData, value, sizeof(double)*m_nNumColumns*m_nNumRows); 
} 

////////////////////////////////////////////////////////////////////// 
// 設置指定元素的值 
// 
// 參數: 
// 1. int nRows - 指定的矩陣行數 
// 2. int nCols - 指定的矩陣列數 
// 3. double value - 指定元素的值 
// 
// 返回值:BOOL 型,說明設置是否成功 
////////////////////////////////////////////////////////////////////// 
BOOL CMatrix::SetElement(int nRow, int nCol, double value) 
{ 
if (nCol < 0 || nCol >= m_nNumColumns || nRow < 0 || nRow >= 
m_nNumRows) 
return FALSE; // 
array bounds error 
if (m_pData == NULL) 
return 
FALSE; // bad pointer error 

m_pData[nCol + nRow * m_nNumColumns] = value; 

return TRUE; 
} 

////////////////////////////////////////////////////////////////////// 
// 設置指定元素的值 
// 
// 參數: 
// 1. int nRows - 指定的矩陣行數 
// 2. int nCols - 指定的矩陣列數 
// 
// 返回值:double 型,指定元素的值 
////////////////////////////////////////////////////////////////////// 
double CMatrix::GetElement(int nRow, int nCol) const 
{ 
ASSERT(nCol >= 0 && nCol < m_nNumColumns && nRow >= 0 && nRow < 
m_nNumRows); // array bounds error 

ASSERT(m_pData); // 
bad pointer error 
return m_pData[nCol + nRow * m_nNumColumns] ; 
} 

////////////////////////////////////////////////////////////////////// 
// 獲取矩陣的列數 
// 
// 參數:無 
// 
// 返回值:int 型,矩陣的列數 
////////////////////////////////////////////////////////////////////// 
int CMatrix::GetNumColumns() const 
{ 
return m_nNumColumns; 
} 

////////////////////////////////////////////////////////////////////// 
// 獲取矩陣的行數 
// 
// 參數:無 
// 
// 返回值:int 型,矩陣的行數 
////////////////////////////////////////////////////////////////////// 
int CMatrix::GetNumRows() const 
{ 
return m_nNumRows; 
} 

////////////////////////////////////////////////////////////////////// 
// 獲取矩陣的數據 
// 
// 參數:無 
// 
// 返回值:double型指針,指向矩陣各元素的數據緩沖區 
////////////////////////////////////////////////////////////////////// 
double* CMatrix::GetData() const 
{ 
return m_pData; 
} 

////////////////////////////////////////////////////////////////////// 
// 獲取指定行的向量 
// 
// 參數: 
// 1. int nRows - 指定的矩陣行數 
// 2. double* pVector - 指向向量中各元素的緩沖區 
// 
// 返回值:int 型,向量中元素的個數,即矩陣的列數 
////////////////////////////////////////////////////////////////////// 
int CMatrix::GetRowVector(int nRow, double* pVector) const 
{ 
if (pVector == NULL) 
delete pVector; 

pVector = new double[m_nNumColumns]; 
ASSERT(pVector != NULL); 

for (int j=0; j<m_nNumColumns; ++j) 
pVector[j] = GetElement(nRow, j); 

return m_nNumColumns; 
} 

////////////////////////////////////////////////////////////////////// 
// 獲取指定列的向量 
// 
// 參數: 
// 1. int nCols - 指定的矩陣列數 
// 2. double* pVector - 指向向量中各元素的緩沖區 
// 
// 返回值:int 型,向量中元素的個數,即矩陣的行數 
////////////////////////////////////////////////////////////////////// 
int CMatrix::GetColVector(int nCol, double* pVector) const 
{ 
if (pVector == NULL) 
delete pVector; 

pVector = new double[m_nNumRows]; 
ASSERT(pVector != NULL); 

for (int i=0; i<m_nNumRows; ++i) 
pVector[i] = GetElement(i, nCol); 

return m_nNumRows; 
} 

////////////////////////////////////////////////////////////////////// 
// 重載運算符=,給矩陣賦值 
// 
// 參數: 
// 1. const CMatrix& other - 用于給矩陣賦值的源矩陣 
// 
// 返回值:CMatrix型的引用,所引用的矩陣與other相等 
////////////////////////////////////////////////////////////////////// 
CMatrix& CMatrix::operator=(const CMatrix& other) 
{ 
if (&other != this) 
{ 
BOOL bSuccess = Init(other.GetNumRows(), 
other.GetNumColumns()); 
ASSERT(bSuccess); 

// copy the pointer 
memcpy(m_pData, other.m_pData, 
sizeof(double)*m_nNumColumns*m_nNumRows); 
} 

// finally return a reference to ourselves 
return *this ; 
} 

////////////////////////////////////////////////////////////////////// 
// 重載運算符==,判斷矩陣是否相等 
// 
// 參數: 
// 1. const CMatrix& other - 用于比較的矩陣 
// 
// 返回值:BOOL 型,兩個矩陣相等則為TRUE,否則為FALSE 
////////////////////////////////////////////////////////////////////// 
BOOL CMatrix::operator==(const CMatrix& other) const 
{ 
// 首先檢查行列數是否相等 
if (m_nNumColumns != other.GetNumColumns() || m_nNumRows != 
other.GetNumRows()) 
return FALSE; 

for (int i=0; i<m_nNumRows; ++i) 
{ 
for (int j=0; j<m_nNumColumns; ++j) 
{ 
if (GetElement(i, j) != other.GetElement(i, j)) 
return FALSE; 
} 
} 

return TRUE; 
} 

////////////////////////////////////////////////////////////////////// 
// 重載運算符!=,判斷矩陣是否不相等 
// 
// 參數: 
// 1. const CMatrix& other - 用于比較的矩陣 
// 
// 返回值:BOOL 型,兩個不矩陣相等則為TRUE,否則為FALSE 
////////////////////////////////////////////////////////////////////// 
BOOL CMatrix::operator!=(const CMatrix& other) const 
{ 
return !(*this == other); 
} 

////////////////////////////////////////////////////////////////////// 
// 重載運算符+,實現矩陣的加法 
// 
// 參數: 
// 1. const CMatrix& other - 與指定矩陣相加的矩陣 
// 
// 返回值:CMatrix型,指定矩陣與other相加之和 
////////////////////////////////////////////////////////////////////// 
CMatrix CMatrix::operator+(const CMatrix& other) const 
{ 
// 首先檢查行列數是否相等 
ASSERT (m_nNumColumns == other.GetNumColumns() && m_nNumRows == 
other.GetNumRows()); 

// 構造結果矩陣 
CMatrix result(*this) ; // 拷貝構造 
// 矩陣加法 
for (int i = 0 ; i < m_nNumRows ; ++i) 
{ 
for (int j = 0 ; j < m_nNumColumns; ++j) 
result.SetElement(i, j, result.GetElement(i, j) + 
other.GetElement(i, j)) ; 
} 

return result ; 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线播放成人| 欧美一区二区性放荡片| 99re8在线精品视频免费播放| 国产主播一区二区三区| 成人爱爱电影网址| 99re在线视频这里只有精品| 91免费精品国自产拍在线不卡| 91亚洲精品乱码久久久久久蜜桃| 91小视频免费观看| 欧美亚洲一区二区三区四区| 欧美一区二区大片| 国产拍揄自揄精品视频麻豆| 国产精品久久久久aaaa樱花| 欧美国产日韩a欧美在线观看 | 69堂精品视频| 亚洲精品一区二区在线观看| 亚洲欧洲日韩av| 日韩精品成人一区二区三区| 国产麻豆91精品| 欧美日韩一区不卡| 欧美国产日韩精品免费观看| 日韩精品一级中文字幕精品视频免费观看 | 中文字幕av不卡| 国产精品天美传媒沈樵| 亚洲成人精品一区| 91麻豆精东视频| 久久久久久久久久电影| 亚洲国产日韩精品| 99久久伊人久久99| 久久综合资源网| 免费成人你懂的| 欧美亚洲国产一区二区三区 | 国产一区二区免费视频| 欧美男人的天堂一二区| 一二三四区精品视频| 99麻豆久久久国产精品免费优播| 国产婷婷精品av在线| 蜜乳av一区二区| 欧美videossexotv100| 日韩国产精品久久久| 日韩一区二区在线看片| 婷婷夜色潮精品综合在线| 欧美色图在线观看| 亚洲国产高清在线| 懂色av中文一区二区三区 | 亚洲一区二区三区四区中文字幕| www.性欧美| 亚洲午夜激情网页| 91精品国产品国语在线不卡| 免费人成黄页网站在线一区二区| 欧美理论片在线| 国内成人免费视频| 亚洲天堂2016| 337p日本欧洲亚洲大胆精品| 国产伦精品一区二区三区免费迷| 国产精品人妖ts系列视频| 91免费看视频| 国产电影一区在线| 亚洲成人在线网站| 久久久99精品免费观看不卡| 色av成人天堂桃色av| 日韩电影在线免费| 亚洲欧美视频在线观看视频| 欧美不卡视频一区| 91视频xxxx| 国产毛片精品国产一区二区三区| 亚洲女与黑人做爰| 精品嫩草影院久久| 欧美日韩激情一区二区| 成人综合婷婷国产精品久久蜜臀| 婷婷成人综合网| 一区二区三区成人在线视频| 精品不卡在线视频| 欧美一区二区播放| 欧美三级视频在线| 91福利区一区二区三区| 亚洲国产一区二区三区青草影视| 在线视频观看一区| 色综合久久久久综合体| 国产麻豆成人传媒免费观看| 美女在线一区二区| 日本不卡视频在线观看| 亚洲国产精品自拍| 亚洲va欧美va人人爽| 一区二区三区四区蜜桃| 亚洲精品视频一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲国产成人私人影院tom| 久久久久久**毛片大全| 久久久久久久电影| 中文字幕av一区二区三区高| 国产三级精品在线| 亚洲色图在线播放| 亚洲精品中文字幕乱码三区| 亚洲欧美日韩在线播放| 一区二区三区不卡视频| 日韩电影在线观看网站| 免费在线观看视频一区| 国产成人鲁色资源国产91色综| 国产成人免费av在线| 色综合久久中文综合久久97| 日本道色综合久久| 久久综合色一综合色88| 亚洲欧洲在线观看av| 同产精品九九九| 国产精品一区二区无线| 欧美少妇一区二区| 精品国产乱子伦一区| 亚洲另类在线一区| 久久99精品国产.久久久久| 成人av电影在线| 欧美精品视频www在线观看 | 久久久久久久性| 国产精品三级av| 日韩**一区毛片| 91天堂素人约啪| 欧美韩日一区二区三区| 日韩成人免费看| 在线视频你懂得一区二区三区| 国产亚洲一二三区| 免费一级欧美片在线观看| 欧美视频一二三区| 亚洲欧洲另类国产综合| 国产99精品在线观看| 久久久久久麻豆| 国内外成人在线视频| 日韩一区二区三区视频在线 | 91黄色激情网站| 欧美激情在线免费观看| 国产成人av电影在线| xvideos.蜜桃一区二区| 狠狠色综合播放一区二区| 欧美精品乱人伦久久久久久| 亚洲一区在线看| 欧美色区777第一页| 天堂va蜜桃一区二区三区| 激情另类小说区图片区视频区| 日韩欧美一区电影| 国产精品18久久久久久久久久久久| 91精品久久久久久久91蜜桃| 奇米四色…亚洲| 欧美国产国产综合| 色婷婷综合在线| 日韩不卡一区二区三区| 26uuuu精品一区二区| 高清av一区二区| 亚洲一区二区三区中文字幕| 欧美一级理论性理论a| 国产成人aaa| 亚洲h动漫在线| 国产精品视频免费看| 91丝袜高跟美女视频| 国产欧美一区二区精品久导航| 成人综合在线观看| 污片在线观看一区二区| 欧美激情一区二区三区四区| 欧美亚洲一区二区在线| 国产aⅴ精品一区二区三区色成熟| 18欧美乱大交hd1984| 日韩美女一区二区三区| 97久久超碰精品国产| 国产成人欧美日韩在线电影| 亚洲电影中文字幕在线观看| 国产精品午夜在线观看| 日韩欧美成人激情| 欧美精品欧美精品系列| 色综合天天综合给合国产| 高清不卡在线观看av| 精品伊人久久久久7777人| 日韩精品欧美成人高清一区二区| 中文字幕在线免费不卡| 国产午夜亚洲精品理论片色戒| 欧美成人一区二区三区片免费| 欧美性生交片4| 欧美日韩和欧美的一区二区| 91视频国产观看| 在线一区二区观看| 色噜噜狠狠色综合欧洲selulu| www.日韩精品| 在线亚洲人成电影网站色www| 色悠久久久久综合欧美99| 日本韩国视频一区二区| 欧美色视频在线| 欧美日韩精品一区二区天天拍小说| 一道本成人在线| 欧美精品第1页| 久久在线观看免费| 久久精品视频在线看| 亚洲三级在线播放| 午夜精品免费在线| 激情文学综合插| 91亚洲精品久久久蜜桃| 色哟哟亚洲精品| 欧美mv和日韩mv的网站| 国产精品福利电影一区二区三区四区| 国产精品久久久久久久裸模| 尤物av一区二区| 国产精品一区二区在线观看网站| 亚洲一区二区三区激情| 狠狠色狠狠色综合系列|