亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产老肥熟一区二区三区| 国产精品青草久久| 国产99久久久国产精品 | 亚洲特黄一级片| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产黄色成人av| 亚洲成a人v欧美综合天堂下载 | 日韩—二三区免费观看av| 国产日韩精品久久久| 在线成人av影院| 91免费看视频| 国产成人免费视频| 另类小说色综合网站| 夜夜爽夜夜爽精品视频| 久久久电影一区二区三区| 欧美二区在线观看| 欧美亚洲愉拍一区二区| 播五月开心婷婷综合| 狠狠色综合日日| 日韩成人dvd| 午夜激情久久久| 亚洲一区二区不卡免费| 国产精品久久久久久久久久免费看| 日韩欧美一区中文| 欧美一级艳片视频免费观看| 欧美亚洲愉拍一区二区| 日本久久一区二区三区| 91香蕉视频黄| 丁香婷婷综合色啪| 国产精品一线二线三线精华| 美女在线视频一区| 久久精品国产亚洲高清剧情介绍 | 99在线热播精品免费| 国产一区二区在线影院| 麻豆91精品91久久久的内涵| 婷婷激情综合网| 香蕉成人伊视频在线观看| 亚洲一区二区三区精品在线| 亚洲一区在线看| 亚洲韩国精品一区| 亚洲成av人片一区二区三区| 亚洲午夜激情网站| 亚洲妇熟xx妇色黄| 香蕉加勒比综合久久| 日韩av电影天堂| 青青草国产成人99久久| 久久97超碰国产精品超碰| 久久99日本精品| 日本在线不卡视频一二三区| 秋霞成人午夜伦在线观看| 免费观看久久久4p| 蓝色福利精品导航| 国产一区欧美一区| 国产91在线观看丝袜| 粉嫩久久99精品久久久久久夜| 成人免费av网站| 91在线一区二区三区| 91亚洲国产成人精品一区二区三| 色综合久久久久综合| 欧美在线不卡一区| 欧美一区二区二区| www久久精品| 亚洲国产精品一区二区尤物区| 亚洲中国最大av网站| 日本网站在线观看一区二区三区| 日韩成人免费电影| 国产福利91精品一区| 色综合天天综合网国产成人综合天| 91麻豆蜜桃一区二区三区| 欧美亚洲一区三区| 日韩一级大片在线| 日本一区二区三级电影在线观看 | 最新日韩在线视频| 亚洲自拍偷拍麻豆| 老司机午夜精品| 粉嫩aⅴ一区二区三区四区| 色综合久久99| 日韩一区二区电影在线| 国产校园另类小说区| 亚洲免费三区一区二区| 视频一区二区三区入口| 国产盗摄视频一区二区三区| 色综合中文字幕国产 | 亚洲人成伊人成综合网小说| 亚洲成国产人片在线观看| 国内外成人在线| 91色综合久久久久婷婷| 欧美一级视频精品观看| 国产精品美日韩| 日韩av中文在线观看| 成人精品gif动图一区| 6080午夜不卡| 自拍偷拍亚洲综合| 久久国产尿小便嘘嘘| 色狠狠一区二区| 国产欧美一区二区三区鸳鸯浴 | 成人一道本在线| 欧美精品久久久久久久多人混战| 国产日本一区二区| 首页综合国产亚洲丝袜| 不卡的电视剧免费网站有什么| 日韩视频免费观看高清完整版| 亚洲欧美日韩一区二区 | 777欧美精品| 最好看的中文字幕久久| 青青国产91久久久久久| 91最新地址在线播放| 日韩一级片网址| 欧美电影免费观看高清完整版| 一区二区三区四区在线| 九九国产精品视频| 色婷婷精品大在线视频| 精品日韩在线观看| 亚洲欧美成人一区二区三区| 国产成人精品亚洲日本在线桃色| 欧美在线不卡视频| 中文字幕第一区| 麻豆成人av在线| 欧美系列日韩一区| 久久欧美中文字幕| 激情综合一区二区三区| 欧美欧美欧美欧美| 中文字幕日韩av资源站| 另类人妖一区二区av| 精品视频全国免费看| 亚洲一区二区三区不卡国产欧美| 成人激情免费网站| 26uuu精品一区二区在线观看| 亚洲午夜三级在线| 色婷婷精品大视频在线蜜桃视频| 中文字幕一区在线| 国产麻豆精品视频| 日韩色在线观看| 日本最新不卡在线| 欧美吻胸吃奶大尺度电影 | 国产视频一区不卡| 国产成人午夜精品影院观看视频 | 久久久久久久久99精品| 视频一区二区欧美| 精品视频免费在线| 人人精品人人爱| 欧美精品在线一区二区| 一区二区国产视频| 色av成人天堂桃色av| 亚洲视频你懂的| 在线观看国产精品网站| 亚洲桃色在线一区| 色欧美日韩亚洲| 一色屋精品亚洲香蕉网站| 波多野结衣中文一区| 国产性色一区二区| 成人永久aaa| 中文字幕精品一区| 成人一级黄色片| 最新日韩av在线| 欧美在线看片a免费观看| 亚洲一区中文日韩| 欧美日韩在线免费视频| 亚洲成a人片在线观看中文| 欧美高清视频一二三区 | 91视频.com| 一区二区欧美视频| 欧美日韩在线综合| 蜜臀av性久久久久av蜜臀妖精| 久久久www成人免费无遮挡大片| 精品午夜久久福利影院| 久久女同精品一区二区| 国产91精品精华液一区二区三区| 国产欧美日韩精品在线| 色诱视频网站一区| 亚洲成在人线在线播放| 欧美亚洲国产一区二区三区va| 精品日本一线二线三线不卡| 国产乱对白刺激视频不卡| 国产精品理伦片| 欧美在线免费观看亚洲| 蜜臀av亚洲一区中文字幕| 国产精品视频九色porn| 在线免费观看视频一区| 日本成人在线不卡视频| 久久女同互慰一区二区三区| 国产一区二区三区香蕉| 亚洲在线视频免费观看| 欧美α欧美αv大片| 成人综合在线视频| 亚洲一区成人在线| 日韩欧美黄色影院| 国产成人精品一区二区三区网站观看| 中文字幕亚洲欧美在线不卡| 欧美日韩国产免费| 国产在线视频一区二区| 亚洲a一区二区| 久久久精品2019中文字幕之3| 一本大道久久a久久精品综合 | 美女视频黄 久久| 国产精品乱人伦| 欧美日韩二区三区| 国产99久久久国产精品潘金| 亚洲va欧美va人人爽午夜| 欧美日韩精品系列|