IO之詳解cin(c++IO關鍵理解)

? ? ? ?

目錄

cin原理介紹

控制符(hex、oct、dec)

cin如何檢查輸入

cin與字符串

cin.get(char ch)

cin.get(void)

istream &get(char*,int)

istream &get(char*,int,char)

istream &getline(char*,int);

遇到文件結尾EOF

無法完成一次完整輸入:設置failbit為1

發生硬件錯誤時:badbit被設置為1

設置cin狀態:clear()和setstat()

丟棄后續字符:istream &ignore(int =1,int =EOF)

關鍵總結

? ? ? ? cin什么時候會被設置eofbit和failbit

? ? ? ? cin.get(char)什么時候會被設置eofbit和failbit

????????cin.get(void)什么時候會被設置eofbit和failbit

? ? ? ? cin.get(char*,int)什么時候會被設置eofbit和failbit

????????cin.getline(char*,int)什么時候會被設置eofbit和failbit

????????cin >> str 和 cin.get(char*,int)有什么區別

????????cin.get(char*,int)與cin.getline(char*,int)有什么區別

? ? ? ? cin怎么停的

? ? ? ? cin怎么開始的

? ? ? ? cin.get(char*,int)與cin.getline(char*,int)怎么開始的

char cin.peek()

istream& cin.putback( char ch)


詳細了解cin,了解c++的IO邏輯,對我們的工作以及字符串leetcode題目都大有好處。文章中盡量用更加通俗的語言,去給大家描述。舉了大量的例子,去給大家演示。只要大家能夠跟著文章節奏走,一定會有很大收獲。對于日后的c++文件操作,大有裨益。對于文章中的筆誤之處,歡迎大家批評指正。

cin原理介紹

? ? ? ? 大家感興趣的可以先看一下這篇博文:cout格式控制? ? ? ? ,了解cout和cin有助于我們深切理解c++處理IO的邏輯。
? ? ? ? c++把輸入輸出都看做字節流。通過鍵盤所生成的屏幕上的字符,就是字符字節流或字符序列。

int a;
cin >> a;

? ? ? ? 可是變量a底層存儲的是32個二進制位,4個字節。cin不可能每次嚴格讀取四個字符輸入給a。這就是大家要明白的一件事:抽取時進行了類型轉換--->將字符字節流轉換為相應變量類型的二進制位

  • 輸入123
  • cin >> a;a是int;此時cin將字符123轉化為4字節二進制,存儲到a。
  • cin >> a;a是double;此時cin將字符123轉化為8字節二進制,存儲到a。

控制符(hex、oct、dec)

  • cin >> hex;后續cin會持續將輸入解釋為16進制;
  • cin >> oct;后續cin會持續將輸入解釋為8進制;
  • cin >> dec;后續cin會持續將輸入解釋為10進制
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int a;cin >> hex;cin >> a;// 此時鍵入12cout << a << endl;cout << hex ;cout << a << endl;return 0; 
}

cin如何檢查輸入

  • cin會跳過開頭所有空白(空白:空格、制表符、換行符);
  • cin在遇到第一個類型不匹配的字符時會停止。例如,cin >> a(int);輸入“? ? 123S”,cin遇到S時會停止
  • 注意:cin正在繼續匹配的過程中遇到空白,認為空白是類型不匹配的字符
  • 注意:即使是:cin >> ch(char);大家知道char類型當然是可以包括空格字符的,但是即使是這樣cin依然會跳過所有的空白,無法把空格賦給ch。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int a;char ch;cin >> a;// 此時鍵入123S--->123會被輸入給a,字符'S'會留在輸入隊列里cout << a << endl;cin >> ch;// 將輸入隊列里的'S'取出,賦給chcout << ch << endl;return 0; 
}

cin與字符串

? ? ? ? cin將輸入流中的數據賦給字符串指針時,會自動在后面添加'\0'。正常的字符串中當然可以有空格、制表符、換行符,但是cin同樣會跳過開頭空白,并且認為中間的空白是類型不匹配的字符。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char ch[20];cin >> ch;// 輸入“   123   456"cout << ch << endl;return 0; 
}

cin.get(char ch)

????????cin.get(char ch)將下一字符賦給ch,即使下一字符是空格、制表符、換行符。cin.get(char ch)返回指向該cin的引用,因此可以拼接使用:cin.get(char ch1).get(char ch2).get(char ch3)。
? ? ? ? cin.get(char ch)與cin >> ch的比較:

  • 兩者都是從輸入隊列里獲取下一個字符
  • cin.get(char ch)的的確確是獲取下一個字符,cin >> ch會跳過空白去尋找下一個字符
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char ch;cin.get(ch);// 輸入“   1"cout << ch << endl;return 0; 
}

cin.get(void)

  • 返回類型為 int
  • 取出下一個字符,將這個字符的ascII碼返回
  • 由于返回類型為int,所以不能拼接使用。例如:cin.get().get(),這樣寫是錯誤的。

????????接下來的例子中,大家運行一下,想想其中的邏輯。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int a;a = cin.get();// 輸入1cout << a << endl;a = cin.get();cout << a << endl;a = cin.get();// 輸入2cout << a << endl;return 0; 
}

? ? ? ? cin.get(char)與cin.get(void)都是用于處理單字符的。接下來我們會講解四個處理字符串的成員函數。

istream &get(char*,int)

? ? ? ? 假設有:

char line[5];
cin.get(line,5);

? ? ? ? cin.get(char*,int)會讀取4個字符,然后將數組末尾添加'\0';如果cin.get(char*,int)還未讀取4個字符就遇到了換行符,那么cin.get(char*,int)將停止讀取,補上'\0',并且把換行符留在輸入隊列中。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char line[5];cin.get(line,5); // 輸入1234\ncout << line << endl;char ch;cin.get(ch);   // 此時還殘留在輸入隊列里的'\n'將會被賦給ch,也就是說此處控制臺不會提示讓我們繼續輸入cout << ch;return 0; 
}

istream &get(char*,int,char)

? ? ? ? 與istream &get(char*,int)邏輯完全一樣,只不過把默認的遇到換行符停止變為自定義的char而已。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char line[5];cin.get(line,5,'$'); // 輸入1234$cout << line << endl;char ch;cin.get(ch);   // 此時還殘留在輸入隊列里的'$'將會被賦給ch,也就是說此處控制臺不會提示讓我們繼續輸入cout << ch;return 0; 
}

istream &getline(char*,int);

? ? ? ? 同istream &get(char*,int)邏輯一樣,主要區別是:istream &getline(char*,int)會把換行符從輸入隊列中取出,然后丟棄。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char line[5];cin.getline(line,5); // 輸入1234\ncout << line << endl;char ch;cin.get(ch);   // 此時輸入隊列里為空,也就是說此處控制臺會提示讓我們繼續輸入cout << ch;return 0; 
}

istream &getline(char*,int,char);

? ? ? ? 與istream &getline(char*,int)邏輯完全一樣,只不過把默認的遇到換行符停止變為自定義的char而已。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char line[5];cin.getline(line,5,'$'); // 輸入1234$\ncout << line << endl;char ch;cin.get(ch);   // 此時輸入隊列里還有一個'\n',也就是說此處控制臺不會提示讓我們繼續輸入cout << ch;return 0; 
}

遇到文件結尾EOF

? ? ? ? EOF是個宏,值是-1,不同系統中可能數值不一樣;什么叫做文件結尾,換行符首先不是文件結尾,換行符是一個字符,這一點要先搞清楚。當我們想要讀取文件時,文件最后一個字符的后面會被插入一個EOF,這個EOF就是文件結尾。在控制臺上我們可以通過快捷鍵模擬出文件結尾:window--->ctrl+z;linux/macos--->ctrl+d。

? ? ? ? 回顧一下我們都講了幾種輸入方式:

  • cin
  • cin.get(char)
  • cin.get(void)
  • cin.get(char*,int)
  • cin.getline(char*,int)

? ? ? ? 這幾種輸入,一旦遇到文件結尾。都會使對象cin變為錯誤狀態。
? ? ? ? cin對象內部有一個比特位,這個比特位對應的變量(這里我們權且把它叫做比特位變量吧,大家都能理解),叫做eofbit。很顯然eofbit取值只能是0和1。默認情況下,eofbit = 0,代表cin狀態正常。上文講的所有輸入方式一旦遇到文件結尾,就會把cin對象內部的eofbit比特級變量設置為1,此時cin處于錯誤狀態。這意味著:cin >> ch;cin.get(char);cin.get(char*,int);cin.getline(char*,int)全部都會將eofbit設置為1這還意味著接下來的cin不能正常使用。
????????cin.eof()用于判斷eofbit是否被設置為1,被設為1返回true,否則返回false;

? ? ? ? 在說明這件事之前,有一個小細節需要表明。cin >> ch等,平時返回cin對象。如果放在if中,即if(cin >> ch)將會返回布爾值。如果完成一次完整輸入,則返回false,否則將返回false。
? ? ? ? 何時無法完成一次完整輸入呢

  • cin狀態一開始就處在錯誤狀態
  • cin處在良好狀態,讀到的第一個非空字符就不符合要求

? ? ? ? 何時完成一次完整輸入呢

  • cin讀取到正確字符并正常返回,此時cin狀態良好
  • cin讀取到了正確字符,繼續讀時遇到eof,此時cin處在錯誤狀態。但是完成了一次完整輸入,if(cin >> a)成立。

? ? ? ? 關于if(cin >> a)何時成立,大家按照上述邏輯自行測試。下面是測試eofbit的代碼。

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{char line[5];cin >> line;   //輸入12ctrl+d    我在vscode下需要兩次ctrl+dif(cin.eof()){cout << "eofbit == 1"<< endl;//這意味著確實讀到了文件結尾EOF}else{cout << "eofbit == 0"<< endl;}if(cin >> line){cout << "cin is true" << endl;}else{cout << "cin is false" << endl;}return 0; 
}

無法完成一次完整輸入:設置failbit為1

? ? ? ? failbit與上述eofbit邏輯一樣,區別是eofbit在遇到文件結尾EOF時被設置為1,而failbit在無法完成一次完整輸入被設置為1。cin.eof()用于檢測eofbit是否被設置為1,而cin.fail()用于檢測failbit是否被設置為1。failbit被設置為1時,cin同樣處于錯誤狀態

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int a;cin >> a;   //輸入S    if(cin.fail()){cout << "failbit == 1"<< endl;//這意味著讀取失敗,failbit被設置}else{cout << "failbit == 0"<< endl;}if(cin >> a){cout << "cin is true" << endl;}else{cout << "cin is false" << endl;}return 0; 
}

發生硬件錯誤時:badbit被設置為1

? ? ? ? 發生硬件錯誤時,badbit被設置為1,此時cin處在錯誤狀態。cin.bad()用于檢測badbit是否為1。不再贅述。

設置cin狀態:clear()和setstat()

? ? ? ? eofbit、failbit、badbit只要有一個被設為1,cin就會處于錯誤狀態。處于錯誤狀態的cin將無法使用。

  • cin.clear():清除全部3個狀態位
  • cin.clear(eofbit):設置eofbit為1,其余兩個狀態位被清除
  • setstat(eofbit):設置eofbit為1,不對另外兩個狀態做任何操作

? ? 別著急測試,等講完下一個再測試,后續會說明原因。

丟棄后續字符:istream &ignore(int =1,int =EOF)

? ? ? ? cin.ignore(255,'\n'):丟棄后續255個字符或者遇到換行符。
? ? ? ? 默認cin.ignore(int =1,int =EOF)丟棄指定數目的字符或者遇到文件結尾。

? ? ? ? 大家多加體會一下下列代碼

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{int a;cin >> a;   //輸入S   if(cin.fail()){cout << "failbit == 1"<< endl;//failbit被設置,cin進入錯誤狀態}else{cout << "failbit == 0"<< endl;}cin.clear(); // 設置cin為正常狀態,但是不匹配字符還在輸入隊列里cin.ignore(1,'\n');if(cin >> a)    //  此時cin狀態恢復正常,輸入隊列里已經沒有數據,此時控制臺會要求再次輸入數據{cout << "cin is true" << endl;}else{cout << "cin is false" << endl;}return 0; 
}

關鍵總結

? ? ? ? 我們已經幾乎全部講完cin相關知識,為了能夠更加牢靠的記住這些知識。我們做一些大致的總結和比較,也就是說我們簡單想一些場景,進行總結比較一下。如果大家覺得有什么問題或者錯誤,感謝大家評論區批評指正。對于初學者別怕麻煩,最好一個個測試一下。

? ? ? ? cin什么時候會被設置eofbit和failbit

  • cin >> ch(char);除非第一個非空字符就是EOF文件結尾,此時會同時設置eofbit和failbit;其余情況,不可能設置eofbit或者failbit(我說的不可能,是因為我確實沒有想到相關場景。如果說成大概率不會設置...,這樣我說的話更不容易出錯。可是這種說辭很不利于我們學習成長,這里不是在考試。我們應當渴望自己發現問題,并改正它)。
  • cin >> str(char*);第一個字符就遇到EOF,會同時設置eofbit和failbit;已經讀取了一些字符,繼續讀取時遇到EOF,此時會設置eofbit;
  • cin >> a(int):第一個字符就遇到EOF,第一個非空字符不是數字,都會同時設置eofbit和failbit;已經讀取了相關數字,繼續讀取時遇到EOF,此時會設置eofbit;

? ? ? ? cin.get(char)什么時候會被設置eofbit和failbit

  • 除非第一個非空字符就是EOF文件結尾,此時會同時設置eofbit和failbit;其余情況,不可能設置eofbit或者failbit。

????????cin.get(void)什么時候會被設置eofbit和failbit

  • 遇到文件結尾時cin.get()返回EOF;除非第一個非空字符就是EOF文件結尾,此時會同時設置eofbit和failbit。

? ? ? ? cin.get(char*,int)什么時候會被設置eofbit和failbit

  • 第一個非空字符就是EOF文件結尾,此時會同時設置eofbit和failbit;此時會把空值'\0'放入數組中
  • 已經讀取了一些字符,繼續讀取時遇到EOF,此時會設置eofbit;
  • 直接讀取到換行符,此時會設置failbit,因為沒有讀取成功啊。

????????cin.getline(char*,int)什么時候會被設置eofbit和failbit

  • 第一個非空字符就是EOF文件結尾,此時會同時設置eofbit和failbit;此時會把空值'\0'放入數組中
  • 已經讀取了一些字符,繼續讀取時遇到EOF,此時會設置eofbit;
  • 直接讀取到換行符,不會設置failbit,因為getline從輸入隊列中取走了換行符只不過丟棄了它
  • cin.getline(str,30):如果已經讀取了29個字符,下一個字符不是換行符,將設置failbit。因此包含30個或更多字符的輸入行將終止輸入。

????????cin >> str 和 cin.get(char*,int)有什么區別

? ? ? ? 這個問題留給大家,主要是相互類比加深印象,已經進一步理解其特性。

????????cin.get(char*,int)與cin.getline(char*,int)有什么區別

  • 前者遇到換行符停止,換行符留在輸入隊列;后者遇到換行符終止,換行符被取走丟棄
  • 當第一個字符就是換行符時,前者屬于無法完成一次完整輸入,設置failbit;后者讀取丟棄這個換行符,不設置failbit;兩者都把空白加入str
  • 后者讀取字符數到達num-1后,如果下一個字符不是換行符,將設置failbit;前者則不會

? ? ? ? cin怎么停的

  • 遇到第一個不匹配的字符停止
  • 注意:cin正在繼續匹配的過程中遇到空白,認為空白是類型不匹配的字符。即使是cin >> str(char*),它依然視空白為不匹配的字符。

? ? ? ? cin怎么開始的

? ? ? ? 這個問題比較微妙,大家后續學習中大概率會有些疑問,到時候大家讀一下下面這一句話。看看我總結的對不對,歡迎批評指正。

  • cin在輸入隊列里找數據,它丟棄一個個空白,只要輸入隊列里沒有要匹配的數據,控制臺就打開輸入,讓你輸入數據。

? ? ? ? cin.get(char*,int)與cin.getline(char*,int)怎么開始的

  • 如果輸入隊列沒有數據,則從調用處開始,從控制臺獲得數據
  • 如果輸入隊列里有數據,則讀取這個輸入隊列里的數據。對于控制臺IO來講,它不可能在從控制臺獲得數據。

? ? ? ? 至此文章主要邏輯已經全部闡述完畢,剩下的篇幅,用來給大家講兩個好用的cin成員方法。

char cin.peek()

  • 返回輸入隊列中的下一個字符,但是不抽取這個字符,只是看看而已
  • 大家自行測試即可

istream& cin.putback( char ch)

  • 將一個字符插入到輸入字符串中,被插入的字符將是下一條輸入語句讀取的第一個字符
  • 相當于cin.peek()與cin.get(char)組合使用
#include <iostream>int main()
{using std::cout;using std::cin;using std::endl;char ch;while(cin.get(ch))          {if (ch != '#')cout << ch;else{cin.putback(ch);    break;}}if (!cin.eof()){cin.get(ch);cout << endl << ch << " is next input character.\n";}else{cout << "End of file reached.\n";std::exit(0);}while(cin.peek() != '#')    {cin.get(ch);cout << ch;}if (!cin.eof()){cin.get(ch);cout << endl << ch << " is next input character.\n";}elsecout << "End of file reached.\n";return 0; 
}

? ? ? ? 有什么問題大家可以在評論區說明,歡迎大家批評指正。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84858.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Bootstrap 5學習教程,從入門到精通, Bootstrap 5 分頁(Pagination)知識點及案例代碼(13)

Bootstrap 5 分頁&#xff08;Pagination&#xff09;知識點及案例代碼 Bootstrap 5 提供了強大的分頁組件&#xff0c;幫助開發者輕松實現分頁功能。以下是關于 Bootstrap 5 分頁的詳細語法知識點以及一個完整的案例代碼&#xff0c;包含詳細注釋&#xff0c;幫助初學者快速上…

Dina靶機滲透

1.信息查詢 1.1. Ip查詢 arp-scan -l 192.168.220.137 1.2. 端口收集 nmap -T4 -A -p- 192.168.220.137 1.3. 目錄掃描 dirsearch -u 192.168.220.137 -e* -i 200 通過訪問 robots.txt 文件發現有些禁止訪問得目錄 User-agent: *Disallow: /ange1Disallow: /angel1Dis…

通俗理解存儲過程注入

【通俗理解】存儲過程注入&#xff1a;SQL注入的“豪華升級版” 一、從廚房做菜說起&#xff1a;為什么需要存儲過程&#xff1f; 想象你經營一家連鎖餐廳&#xff0c;每道菜的制作流程非常復雜&#xff08;比如“招牌紅燒肉”需要先焯水、再炒糖色、最后慢燉1小時&#xff09…

【算法】基于中位數和MAD魯棒平均值計算算法

問題 在項目中&#xff0c;需要對異常值進行剔除&#xff0c;需要一種魯棒性比較好的方法&#xff0c;總結了一個實踐方法。 方法 基于中位數和MAD&#xff08;中位數絕對偏差&#xff09;的魯棒平均值計算算法的詳細過程&#xff0c;按照您要求的步驟分解&#xff1a; 算法…

插入點(position) 和對齊點(AlignmentPoint)詳解——CAD c#二次開發

在 AutoCAD 中&#xff0c;文本對象的位置由插入點&#xff08;position&#xff09; 和對齊點&#xff08;Alignment Point&#xff09; 共同控制&#xff0c;兩者的關系取決于文本的對齊方式。以下是詳細說明&#xff1a; 一、插入點與對齊點的定義 1. 插入點&#xff08;p…

QT打包應用

本次工程使用qt mingGw 64-bit 下面詳細介紹下windows平臺qt應用程序打包流程 1、先編譯項目的release版本生成exe文件 2、創建腳本運行windeployqt.exe完成打包 rundeploy.bat腳本 set PATHE:\Tools\qt\Qt5\5.14.2\mingw73_64\bin;%PATH% windeployqt.exe MyDesignWidget.ex…

[軟件測試]:什么是自動化測試?selenium+webdriver-manager的安裝,實現你的第一個腳本

目錄 1. 什么是自動化測試&#xff1f; 回歸測試 自動化分類 2. web自動化測試 3. selenium 1. 什么是自動化測試&#xff1f; 通過自動化測試工具&#xff0c;編寫腳本&#xff0c;自動執行測試用例&#xff0c;主要用于回歸測試&#xff0c;性能測試等重復測試任務 常…

使用OpenCV和Python進行圖像掩膜與直方圖分析

文章目錄 引言1. 準備工作2. 加載并顯示原始圖像3. 創建掩膜3. 應用掩膜5. 計算并顯示直方圖6. 結果分析7. 總結 引言 在圖像處理中&#xff0c;掩膜(Mask)是一個非常重要的概念&#xff0c;它允許我們選擇性地處理圖像的特定區域。今天&#xff0c;我將通過一個實際的例子來展…

Genio 1200 Evaluation MT8395平臺安裝ubuntu

官網教程&#xff1a; Getting Started with Genio 1200 Evaluation Kit — Ubuntu on Genio documentation Windows PC工具&#xff1a; Setup Tool Environment (Windows) — IoT Yocto documentation 鏡像下載地址&#xff1a; Install Ubuntu on MediaTek Genio | Ubu…

如何畫好架構圖:架構思維的三大底層邏輯

&#x1f449;目錄 0 前言 1 宏觀 2 中觀 3 微觀 4 補充 俗話說&#xff0c;一圖勝千言。日常工作中&#xff0c;當我們要表達自己的設計思路的時候&#xff0c;會畫各式各樣的圖。但因為各自知識儲備的差異&#xff0c;思維的差異&#xff0c;不同類型的系統側重的架構設計點也…

Spring MVC擴展消息轉換器-->格式化時間信息

Spring MVC 的消息轉換器的作用&#xff1a;在 HTTP 請求/響應與 Java 對象之間進行轉換 可以自行擴展消息轉換器 一、創建對象映射規則 package com.sky.json;import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.Objec…

Elasticsearch 的自動補全以及RestAPI的使用

Elasticsearch 提供了強大的自動補全 (Autocomplete) 功能,以下為一個基礎的自動補全DSL語句 {"suggest": {"my_suggestion": { // 自定義建議器名稱&#xff0c;可按需修改"text": "ap", // 用戶輸入的前綴&#xff08;如搜索框…

1.4、SDH網狀拓撲

鏈形網星形網樹形網環形網網孔形網 1.鏈形拓撲 結構&#xff1a; 節點像鏈條一樣首尾依次串聯連接。信號從一個節點傳到下一個節點&#xff0c;直至終點。 特點&#xff1a; 簡單經濟&#xff1a; 結構最簡單&#xff0c;成本最低&#xff0c;適用于沿線覆蓋&#xff08;如鐵…

如何在 ArcGIS 中使用 Microsoft Excel 文件_20250614

如何在 ArcGIS 中使用 Microsoft Excel 文件 軟件版本&#xff1a;win11; ArcGIS10.8; Office2024 1. 確認 ArcGIS 10.8 對 .xlsx 文件的支持 ArcGIS 10.8 支持 .xlsx 文件&#xff08;Excel 2007 及以上格式&#xff09;&#xff0c;但需要安裝 Microsoft Access Database …

Python----OpenCV(圖像處理——圖像的多種屬性、RGB與BGR色彩空間、HSB、HSV與HSL、ROI區域)

Python----計算機視覺處理&#xff08;opencv&#xff1a;像素&#xff0c;RGB顏色&#xff0c;圖像的存儲&#xff0c;opencv安裝&#xff0c;代碼展示&#xff09; Python----計算機視覺處理&#xff08;Opencv&#xff1a;圖片顏色識別&#xff1a;RGB顏色空間&#xff0c;…

java設計模式[1]之設計模式概覽

文章目錄 設計模式什么是設計模式為什么要學習設計模式設計模式的設計原則設計模式的分類 設計模式 什么是設計模式 設計模式是前人根據經驗的總結&#xff0c;是軟件開發中的最佳實踐&#xff0c;幫助開發者在面對復雜設計問題時提供有效的解決方案。設計模式不僅僅只是一種…

aflplusplus:開源的模糊測試工具!全參數詳細教程!Kali Linux教程!(四)

使用 afl-lto clang LLVM 編譯器 1. -help 顯示可用選項 afl-lto --help 其他選項同上&#xff0c;這里不再展開敘述。 afl-lto 1. -help 顯示可用選項 afl-lto --help 其他選項同上&#xff0c;這里不再展開敘述。 afl-network-client 1. 幫助文檔 afl-network-cl…

區間合并:牛奶

區間合并&#xff1a;牛奶 牛奶 www.acwing.com/problem/content/description/1345/ 本質就是區間合并問題從第一次擠奶才開始計算兩個最長時間 import java.util.*;public class Main {static final int N 5010;static Pair[] pairs new Pair[N];static class Pair imple…

Hive實現值列表橫向展示(非列轉行)

一、場景說明: 當前有各個流程的節點名稱和節點時間。數倉中的表存在的格式為縱向存儲,分別為節點名稱、接收時間 現數據分析過程中需要將每個流程的節點時間橫向展示,如果沒有該節點則置空 這種區別于行轉列和列轉行的操作。(具體可參考博主**

藍橋杯20151 跳石頭

問題描述 小明正在和朋友們玩跳石頭的小游戲&#xff0c;一共有 n 塊石頭按 1 到 n 順序排成一排&#xff0c;第 i 塊石頭上寫有正整數權值 ci? 。 如果某一時刻小明在第 j 塊石頭&#xff0c;那么他可以選擇跳向第 jcj? 塊石頭 &#xff08;前提 jcj≤n &#xff09;或者跳…