青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

勤能補拙,Expter

成都游戲Coder,記錄游戲開發過程的筆記和心得!

#

WPARAM與LPARAM的區別

具體是這么說:“在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,兩者有明顯的區別。因為地址通常是32位的,所以LPARAM 被用來傳遞地址,這個習慣在Win32 API中仍然能夠看到。在Win32 API中,WPARAM和LPARAM都是32位,所以沒有什么本質的區 別。Windows的消息必須參考幫助文件才能知道具體的含義。如果是你定義的消息,愿意怎么使這兩個參數都行。但是習慣上,我們愿意使用LPARAM傳 遞地址,而WPARAM傳遞其他參數。”


看一個例子就明白了:  程序代碼*在對話框中取出數據,并向其他窗口發送消息和數據,將數據指針作為一個參數發送*/
void CTestDlg2::OnCommBtn()
{
     char szOut[30];
      GetDlgItemText(IDC_OUT,szOut,30);
      m_pParent->SendMessage(WM_DLG_NOTIFY,(WPARAM)szOut);
}

/*在消息接收窗口中*/
/*映射消息處理函數*/
ON_MESSAGE(WM_DLG_NOTIFY,OnDlgNotifyMsg)

/*在視圖中繪制出字符串 m_szOut*/
void CMy53_s1View::OnDraw(CDC* pDC)
{
      CMy53_s1Doc* pDoc = GetDocument();
      ASSERT_VALID(pDoc);
     // TODO: add draw code for native data here
      pDC->TextOut(0,0,"Display String");
      pDC->TextOut(0,20,m_szOut);
}
/*處理通知消息,保存信息并更新顯示*/
LONG CMy53_s1View::OnDlgNotifyMsg(WPARAM wP,LPARAM lP)
{
      m_szOut=(char*)wP;
      Invalidate();
     return 0;
}

一個字符串的地址通過WPARAM來標識,再通過Windows消息發送出去;之后在消息處理函數中WPARAM接受到的參數就是該地址,然后就可以對該地址進行操作了~~~

這是Windows消息機制中經常用到的兩個data type,呵呵。

posted @ 2008-12-24 10:04 expter 閱讀(12552) | 評論 (2)編輯 收藏

一些筆試題(包括金山西山居筆試)

以前做過的筆試題,都是自己曾經做的


# include <iostream>
using namespace std;
#define Q(x)  x*x
int main()
{
    
int a =10;
    
int b = 2;
    
int c = 1;

    a 
/=Q(b+c)/Q(b+c);

    cout 
<< a <<endl;
    
return 0;
}


因為 宏Q(x) 不規范,
所以結果 很迷惑人

a   /=Q(b+c)/Q(b+c);的執行順序是從右到左

tmp = Q(b+c)/Q(b+c) =  2+1*2+1 / 2+1*2+1 =2+2+0+2+1=7  沒有對宏加括號是經常容易犯錯!

a = a/tmp = 10/7 = 1

所以  a = 1;








-----------------------------------------

題目2
反轉一個字符串(西山居筆試題):
題目:寫一個函數,把一個以0字符結尾的字符串str中的'A'字符移到str的末尾!

分析:
1:以時間換空間   從后向前循環查找字符A
2:以空間換時間   一次循環

算法1代碼:

void Deal(char *str )
{
    
int len = strlen(str);
    
int a= len-1,b=0;
    
if (str[a] != '0')
    
{
        
return;             //如果最后一個字符不為'0'
    }

    
while (a>=0)
    
{
        
if (str[a] == 'A')
        
{
            
int n = a;
            
while (n < len-b-1)
            
{
                str[n] 
= str[n+1];  //
                n++;
            }

            str[n] 
='A';
            b
++;           //b累加,表示有b個字符A
        }

        a
--;
    }

}




算法2:
void Deal(char *str )
{
    
int len = strlen(str);
    
int a= len-1,b=0,i=0,j=0;
    
if (str[a] != '0')
    
{
        
return;             //如果最后一個字符不為'0'
    }

    
char * tmp = new char[len+1];
    
while(i<len)
    
{
        
if(str[i] !='A')
            tmp[j
++= str[i];
        
else
            b
++;          //多少個字符A
        i++;
    }


    
while (j<len)
    
{
        tmp[j
++= 'A';
    }

    tmp[len] 
= '\0';
    strcpy(str,tmp);

    
    delete tmp;   
//釋放空間
    tmp = NULL;
}




PS:因為是直接手寫的。。所以難免有錯誤!
現在修改了,對不起各位。。。

posted @ 2008-12-22 22:24 expter 閱讀(6047) | 評論 (14)編輯 收藏

畢業前---最近看的書

  明年過年就要上班了,最近看了 effective c++ 和  more effective c++
 
 今天有去圖書館借了3本書,準備回家過年看,

  這3本書為 C++編程藝術 , exceptional c++ style , OOD啟示錄
  都是傳說的好書,但是對于每一個來說不一定是好書, 先看完在說。。


其中Wesley的effective c++ 和  more effective c++ 的確不錯,加深了對c++的認識,以及OO的理解,項目中應該注意的問題!

 加油咯,就要邁入社會了!


posted @ 2008-12-22 22:05 expter 閱讀(339) | 評論 (1)編輯 收藏

心情沉重啊!

sohu被刷了。。
哎!

還是踏實點 好好學習吧!

現在的心情除了失落沒有設么詞形容了

posted @ 2008-12-19 21:33 expter 閱讀(275) | 評論 (0)編輯 收藏

添加一個yahoo的統計代碼,

posted @ 2008-12-14 20:52 expter 閱讀(145) | 評論 (0)編輯 收藏

廣播實現代碼

首先 UDP 默認不能實現廣播
要實現一個機子的廣播,首先 應該明白2個函數
     1.setsockopt 開啟發送廣播報文
     2.getsockopt 確定廣播選項是否關閉

setsockopt 的原型定義:
WINSOCK_API_LINKAGE int WSAAPI setsockopt( IN SOCKET s, IN int level, IN int optname, IN const char FAR * optval, IN int optlen )
開啟報文代碼

if (setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(char *)&bborad,oplen) == SOCKET_ERROR)
    {
        printf(
"setsockopt error!");
        
return 0;
    }

作為server:
然后發送廣播報文
    sockaddr_in addr;
    
int nlen = sizeof(addr);
    memset(
&addr,0,nlen);

    addr.sin_family 
= AF_INET;
    addr.sin_port 
= htons(9999);
    addr.sin_addr.s_addr 
=INADDR_BROADCAST;

    
const char *msg = "hello! This is a test!";
    
int len = strlen(msg);

    
if (sendto(sock,msg,len,0,(struct sockaddr *)&addr,sizeof(addr)) == SOCKET_ERROR)
    {
        printf(
"send error !!");
        
return 0;
    }


然后客戶端:
接受報文:
2008年12月8日
# include <WinSock2.h>
# include 
<stdio.h>

#pragma   comment(lib,   
"ws2_32.lib")
#define WSVERS MAKEWORD(2,0)
//CInitSock initSock;
int main()
{
    WSADATA wsadata; 
    
    
if(WSAStartup(WSVERS,&wsadata))
    {
        printf(
"WSAStartup failed!\n");
        
        
return 0;
    }
    SOCKET sLiten 
= ::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
    
if(sLiten == INVALID_SOCKET)
    {
        printf(
"WSACleanup failed with error %d\n",WSAGetLastError());
        
//printf(" Failed socket()");
        return 0;
    }
    
    sockaddr_in local;
    local.sin_family 
= AF_INET;
    local.sin_port 
= htons(9999);
    local.sin_addr.s_addr 
=INADDR_ANY;
    
    
if(::bind(sLiten,(LPSOCKADDR)&local,sizeof(local)) == SOCKET_ERROR)
    {
        printf(
" failed bind()");
        
return 0;
    }
    
    
char buf[1024];
    sockaddr_in addr;
    
int nlen = sizeof(addr);
    
    
while(1)
    {
        
int recv = ::recvfrom(sLiten,buf,1024,0,(sockaddr *)&addr,&nlen);
        
if(recv )
        {
            buf[recv] 
= '\0';
            printf(
"接收到數據  (%s): (%s)",::inet_ntoa(addr.sin_addr),buf);
        }
    }
    ::closesocket(sLiten);
    
return 0;
}


posted @ 2008-12-08 10:44 expter 閱讀(1790) | 評論 (0)編輯 收藏

轉:鄭州招聘會 觸目驚心圖片背后究竟發生了什么

朋友發來一張圖片,是大學生招聘的現場畫面。看后竟無語以對。究竟發生了什么?看看通用、福特、克萊斯勒在破產邊緣掙扎,雷曼兄弟轟然倒塌,今天英國最大的零售連鎖Woolworths一英磅沒人收購,宣布破產,還有更多的破產倒閉在繼續,中國中小企業上半年已有近7萬家倒閉。同樣華爾街的金融危機正迅速演變成經濟危機,這個籠罩在不少人不愿觸及的敏感話題面紗正快速被撕掉,冬天剛剛開始。

在復雜的國際形勢和惡劣的經濟環境下,獨善其身的企業也不能僥幸。同樣任何行業都必須為這此金融海嘯埋單,包括銀行。前幾天我在回答和訊網馬上訪談的欄目記者采訪時,進一步提出“家電下鄉”大躍進的危機所在,然而大量網友的指責并不能解除家電制造商臉上的尷尬。一方面來自渠道連鎖的積怨已經爆發,另一方面內需的刺激幾乎脫離了實際,還有內外交困的市場環境在一步步逼近并影響到其它行業。毫無疑問,矛盾在上升,眾多的不確定性將在2009年1月-5月發生,不僅僅是將有更多的企業破產消逝,一系列社會問題也將考驗我們每一個人。

這些圖片說明什么?其背后究竟發生了什么?幾乎每一個人都會異口同聲地想到一點那就是就業形勢的嚴峻,然而這只是其一,真正的原因還有經濟形勢不容樂觀,企業競爭力在衰減,市場需求在減少,通漲通縮的變化太快,中國教育的垢病凸顯愈加清晰。等等。但我們是否問過自己,究竟是誰導演了這一切?










        



posted @ 2008-12-08 10:34 expter 閱讀(3046) | 評論 (6)編輯 收藏

STL 中 map和set的區別

stl中:
MAP的節點是一對數據.  
SET的節點是一個數據.

Map使用關鍵值Key來唯一標識每一個成員 map可以重復。
set是集合   

                                   
都屬于關聯容器  
只不過,   map的形式   map<type1,   type2>   mymap;  
           set的形式   set<type>   myset;  


set(集合)——包含了經過排序了的數據,這些數據的值(value)必須是唯一的。

map(映射)——經過排序了的二元組的集 合,map中的每個元素都是由兩個值組成,其中的key(鍵值,一個map中的鍵值必須是唯一的)是在排序或搜索時使用,它的值可以在容器中重新獲取;而 另一個值是該元素關聯的數值。比如,除了可以ar[43] = "overripe"這樣找到一個數據,map還可以通過ar["banana"] = "overripe"這樣的方法找到一個數據。如果你想獲得其中的元素信息,通過輸入元素的全名就可以輕松實現。

map是映射集合中的元素不能重復,set可以進行集合的各種操作(交并補等),當然你也可以用list或vector實現set,但是效率會很低。set一般是用平衡樹或哈西表實現的。
映射是一種一一對應的關系,哈西表也可以看作是映射的一種。映射通常可用來實現字典結構(dictionary)





posted @ 2008-12-06 10:43 expter 閱讀(7780) | 評論 (0)編輯 收藏

09年我曾經遇到的筆試題目

1.指針運算

注意 ,每個例子不只是一個題目,可能有多個,用//....................................來分開的
# include <iostream>
# include 
<stdio.h>
using namespace std;

enum string
{
    x1,x2,x3
=10,x4,x5,
}X;

int main()
{
    
//測試1
   
    cout << x1 << x5<<endl;
    unsigned char *p1;
    unsigned long *p2;
    p1 = (unsigned char *)0x801000;
    p2 = (unsigned long *)0x801000;
    
    printf("%p\n",p1+5);
    printf("%p\n",p2+5);

    char * t [] = { "abccc","daa","caa"};
    char **bb = t;
    cout << t[1] <<endl;
    cout << sizeof(t)<<endl;
   


//....................................
    int a[5= {1,2,3,4,5};
    cout 
<< *( (int *)(&a+1)-2<<endl; 


                
int  i=0;
    
int  j=1;
    
long *= NULL;
    
char *= NULL;
    
if(j++ && i++)
        p
++,c++;
    
if(i++ || j++)
        p
++,c++;

    cout 
<< i <<" " << j << " " << *<< " " << (long *)c <<endl;


   
//....................................
    int i =1;
   
int c = (i++) + (i++) + (i++);

    cout 
<< c <<" "<< i<<endl;

    
return 0;
}

2.
# include <iostream>
# include 
<stdio.h>
using namespace std;

void foo(int k)
{
    
char tmp[100];
    
//sprintf(tmp,"%d",k);
    printf("%d\n",tmp);
    foo(k
-1);
}
int main()
{

    
int  i= 0;
    
int  x= 0;
    
int  y= 0;
    printf(
"%d %d %d %d\n",x--,++y,i++,i++); 
    
char tmp[20]="hello\0\t\\\\world";
    cout
<<tmp<<endl;
    cout 
<< sizeof(tmp) << " " <<strlen(tmp)<<" "<< tmp<<endl;

   
//....................................
    char arr[100]  = "hello world";
    
int  *= (int *)arr;
    v[
0= 0X61626364;
    v[
1= 0X41424344;
    v[
2= 0X31323334;
    v[
3= 0;
    cout
<<arr<<endl;
   
    //....................................
    foo(3);
    return 0;
}


posted @ 2008-12-06 10:27 expter 閱讀(1211) | 評論 (2)編輯 收藏

KMP 算法筆記

KMP算法是查詢子串比較快的一種算法!

我們先看普通的模式匹配算法。。
int Index(String S,String T,int pos)//參考《數據結構》中的程序
{
  i
=pos;j=1;//這里的串的第1個元素下標是1
  while(i<=S.Length && j<=T.Length)
  {
    
if(S[i]==T[j]){++i;++j;}
    
else{i=i-j+2;j=1;}//**************(1)
  }
  
if(j>T.Length) return i-T.Length;//匹配成功
  else return 0;
}
匹配的過程非常清晰,關鍵是當‘失配’的時候進行回溯!

看下面的例子:

S:aaaaabababcaaa  T:ababc

aaaaabababcaaa
    ababc.(.表示前一個已經失配)
回溯的結果就是
aaaaabababcaaa
     a.(babc)
如果不回溯就是
aaaaabababcaaa
        aba.bc
這樣就漏了一個可能匹配成功的情況
aaaaabababcaaa
      ababc



為什么會發生這樣的情況?這是由T串本身的性質決定的,是因為T串本身有前后'部分匹配'的性質。如果T為abcdef這樣的,大沒有回溯的必要。

改進的地方也就是這里,我們從T串本身出發,事先就找準了T自身前后部分匹配的位置,那就可以改進算法。

如果不用回溯,那T串下一個位置從哪里開始呢?

還是上面那個例子,T為ababc,如果c失配,那就可以往前移到aba最后一個a的位置,像這樣:
...ababd...
   ababc
   ->ababc

這樣i不用回溯,j跳到前2個位置,繼續匹配的過程,這就是KMP算法所在。這個當T[j]失配后,j應該往前跳的值就是j的next值,它是由T串本身固有決定的,與S串無關。

《數據結構》上給了next值的定義:
          
0   如果j=1
next[j]
={Max{k|1<k<j且'p1pk-1'='pj-k+1pj-1'
          
1   其它情況

我當初看到這個頭就暈了,其實它就是描述的我前面表述的情況,關于next[1]=0是規定的,這樣規定可以使程序簡單一些,如果非要定為其它的值只要不和后面的值沖突也是可以的;而那個Max是什么意思,舉個例子:

T:aaab

...aaaab...
   aaab
  ->aaab
   ->aaab
    ->aaab

像這樣的T,前面自身部分匹配的部分不止兩個,那應該往前跳到第幾個呢?最近的一個,也就是說盡可能的向右滑移最短的長度。

OK,了解到這里,就看清了KMP的大部分內容,然后關鍵的問題是如何求next值?先不管它,先看如何用它來進行匹配操作,也就是說先假設已經有了next值。

將最前面的程序改寫成:

int Index_KMP(String S,String T,int pos)
{
  i
=pos;j=1;//這里的串的第1個元素下標是1
  while(i<=S.Length && j<=T.Length)
  {
    
if(j==0 || S[i]==T[j]){++i;++j;} //注意到這里的j==0,和++j的作用就知道為什么規定next[1]=0的好處了
    else j=next[j];//i不變(不回溯),j跳動
  }
  
if(j>T.Length) return i-T.Length;//匹配成功
  else return 0;
}

OK,是不是非常簡單?還有更簡單的,求next值,這也是整個算法成功的關鍵,從next值的定義來求太恐怖了,怎么求?前面說過了,next值 表達的就是T串的自身部分匹配的性質,那么,我只要將T串和T串自身來一次匹配就可以求出來了,這里的匹配過程不是從頭一個一個匹配,而是從T[1]和T [2]開始匹配,給出算法如下:

void get_next(String T,int &next[])
{
  i
=1;j=0;next[1]=0;
  
while(i<=T.Length)
  {
    
if(j==0 || T[i]==T[j]){++i;++j; next[i]=j;/**********(2)*/}
    
else j=next[j];
  }
}
注意到(2)語句邏輯覆蓋的時候是T[i]==T[j]以及i前面的、j前面的都匹配的情況下,于是先自增,然后記下來next[i]=j,這樣每當i有 自增就會求得一個next[i],而j一定會小于等于i,于是對于已經求出來的next,可以繼續求后面的next,而next[1]=0是已知,所以整 個就這樣遞推的求出來了,方法非常巧妙。

posted @ 2008-12-06 10:23 expter 閱讀(268) | 評論 (0)編輯 收藏

僅列出標題
共7頁: 1 2 3 4 5 6 7 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜精品久久久久久久蜜桃app | 国产视频精品网| 毛片精品免费在线观看| 久久精品国产99国产精品澳门| 午夜国产一区| 久久精品视频播放| 欧美成人有码| 国产精品国产| 国产午夜精品一区理论片飘花| 国产亚洲女人久久久久毛片| 一区视频在线看| 日韩一级在线| 久久精品91久久久久久再现| 欧美高清在线视频观看不卡| 亚洲精品久久久久久久久久久久| 欧美高清在线一区二区| 99精品免费视频| 久久黄金**| 欧美日韩中文在线观看| 国产欧美日本一区视频| 亚洲精品裸体| 欧美亚洲视频在线观看| 欧美激情导航| 亚洲欧美日韩中文视频| 欧美大片免费看| 国产一区999| 中文欧美字幕免费| 欧美成人精品在线| 性欧美精品高清| 欧美日韩一区在线观看| 揄拍成人国产精品视频| 亚洲新中文字幕| 亚洲第一搞黄网站| 午夜亚洲影视| 欧美三级视频在线播放| 亚洲福利视频网| 欧美一区二区三区在线观看视频| 亚洲国产成人精品久久久国产成人一区 | 国产精品久久9| 亚洲三级影院| 鲁大师成人一区二区三区| 亚洲综合久久久久| 欧美日韩中字| 亚洲精品乱码久久久久| 久久五月激情| 欧美一区二区日韩一区二区| 欧美视频精品在线观看| 日韩视频国产视频| 欧美韩日亚洲| 久久亚洲春色中文字幕| 国产一区二区精品久久| 亚洲欧美日韩另类| 在线视频欧美精品| 一区二区毛片| 欧美成人一区二区在线| 狠狠色狠狠色综合日日tαg| 欧美亚洲一区三区| 中文精品一区二区三区| 国产精品极品美女粉嫩高清在线| 亚洲天堂偷拍| 在线综合亚洲| 国产精品日韩欧美| 香蕉成人伊视频在线观看| 亚洲素人在线| 国产日韩在线播放| 久久久久九九九九| 久久精品视频一| 尤物精品国产第一福利三区 | 欧美激情一区二区三区在线视频| 欧美影院在线播放| 精品动漫3d一区二区三区免费| 久久久久国产成人精品亚洲午夜| 先锋影音一区二区三区| 激情成人亚洲| 亚洲人久久久| 国产美女精品一区二区三区| 久久久久国产精品www| 久久久免费精品| 一区二区毛片| 亚洲午夜在线观看| 国产一区在线视频| 欧美高清视频一区二区| 欧美激情综合五月色丁香小说 | 亚洲视频一区二区| 亚洲一区在线观看视频| 国产亚洲精品久久久| 欧美激情在线| 欧美午夜久久| 免费h精品视频在线播放| 欧美高清在线视频| 亚洲摸下面视频| 久久精品在线视频| 一区二区国产日产| 久久爱另类一区二区小说| 亚洲国产精品一区二区第四页av| 亚洲美女在线看| 国产亚洲综合性久久久影院| 亚洲二区视频| 国产欧美高清| 亚洲黄色免费网站| 国产精品入口福利| 欧美高清视频一区二区| 国产精品一级久久久| 美女精品在线| 国产精品久久久久永久免费观看 | 欧美二区不卡| 欧美在线free| 欧美国产另类| 久久久久久久久一区二区| 欧美日韩一区免费| 欧美大片在线观看一区| 一本一本大道香蕉久在线精品| 国产一区二区三区在线观看网站 | 最新中文字幕亚洲| 国产综合久久久久影院| 夜夜爽99久久国产综合精品女不卡| 国产一区91精品张津瑜| 一区二区三欧美| 亚洲国产精品一区二区第一页| 亚洲调教视频在线观看| 亚洲最黄网站| 欧美高清你懂得| 免费欧美在线视频| 国产欧美一区二区在线观看| 日韩亚洲不卡在线| 亚洲精品免费看| 蜜桃av一区二区在线观看| 久久国产综合精品| 国产麻豆精品久久一二三| 99国产精品久久久| 中文日韩电影网站| 欧美午夜精品伦理| 99精品免费| 亚洲一级在线| 国产精品久久久一区二区| 一区二区三区久久精品| 亚洲一二三四区| 欧美午夜精品久久久| 一个色综合av| 亚洲欧美一区二区三区久久| 国产精品国产三级国产专播精品人| 亚洲精品午夜精品| 一本大道久久精品懂色aⅴ| 欧美日韩视频在线一区二区观看视频 | 欧美人与禽猛交乱配| 亚洲三级视频| 亚洲小说区图片区| 国产精品久久久久一区二区三区| 亚洲一区欧美| 欧美在线观看一区| 激情综合色丁香一区二区| 久久久久国产精品厨房| 麻豆精品视频在线观看视频| 亚洲国产二区| 欧美日韩国产综合久久| 亚洲尤物视频在线| 久久精品国产清高在天天线| 国产亚洲精品资源在线26u| 久久久精品一品道一区| 亚洲国产黄色| 午夜日本精品| 亚洲高清免费视频| 欧美日韩直播| 久久久av水蜜桃| 亚洲国产一区二区三区在线播| 一本色道**综合亚洲精品蜜桃冫| 国产精品电影在线观看| 久久久久久久综合| 99精品欧美一区二区三区| 午夜久久影院| 亚洲人成亚洲人成在线观看图片| 亚洲一区二区毛片| 猛男gaygay欧美视频| 一区二区三区久久精品| 国产一区二区观看| 欧美激情一区二区三区在线视频| 亚洲午夜电影在线观看| 欧美国产一区二区在线观看| 亚洲一区精品电影| 亚洲国产精品一区二区尤物区| 国产精品xxx在线观看www| 免费国产自线拍一欧美视频| 亚洲欧美激情视频| 99视频在线精品国自产拍免费观看| 久久久久国内| 亚洲欧美国产高清va在线播| 亚洲国产专区校园欧美| 国产亚洲一区在线播放| 欧美午夜大胆人体| 欧美大片一区二区| 久久久久一区二区三区| 亚洲综合日韩在线| 亚洲精品一区在线观看香蕉| 久久久久综合网| 西西裸体人体做爰大胆久久久| 亚洲久久一区| 亚洲区欧美区| 亚洲第一级黄色片| 国产一区在线观看视频| 国产精品一区二区久久精品|