《C++初階之STL》【auto關鍵字 + 范圍for循環 + 迭代器】

【auto關鍵字 + 范圍for循環 + 迭代器】目錄

  • 前言:
  • --------------- auto關鍵字 ---------------
    • 1. 什么是auto?
    • 2. 使用關鍵字auto時需要注意什么?
    • 3. 怎么使用auto關鍵字?
  • --------------- 范圍for循環 ---------------
    • 1. 什么是范圍for循環?
    • 2. 怎么使用范圍for循環?
    • 3. 范圍for循環有什么優勢?
  • --------------- 迭代器 ---------------
    • 1. 什么是迭代器?
    • 2. 迭代器有哪些?
      • 2.1:按“功能強弱”進行劃分
      • 2.2:按“讀寫權限+遍歷方向”進行劃分
    • 3. 怎么使用迭代器?

在這里插入圖片描述

往期《C++初階》回顧:

/------------ 入門基礎 ------------/
【C++的前世今生】
【命名空間 + 輸入&輸出 + 缺省參數 + 函數重載】
【普通引用 + 常量引用 + 內聯函數 + nullptr】
/------------ 類和對象 ------------/
【類 + 類域 + 訪問限定符 + 對象的大小 + this指針】
【類的六大默認成員函數】
【初始化列表 + 自定義類型轉換 + static成員】
【友元 + 內部類 + 匿名對象】
【經典案例:日期類】
/------------ 內存管理 ------------/
【內存分布 + operator new/delete + 定位new】
/------------ STL ------------/
【泛型編程 + STL簡介】

前言:

Hi~ 小伙伴們大家好呀 (●’?’●)!這周末我們就要進入 “三伏天” 的入伏階段啦🔥,一年中最熱、最潮濕的時期即將正式開啟,大家一定要注意做好防暑措施哦~🌞💦

今天我們要學習的【auto 關鍵字 + 范圍 for 循環 + 迭代器】內容📚,主要是為后面學習 STL 容器打基礎的喲 (。・ω・。)ノ?
雖然這部分知識相對簡單(????),可大家也不能掉以輕心,要認真掌握呀(? ?_?)?

--------------- auto關鍵字 ---------------

1. 什么是auto?

:在進行string類的模擬實現之前,我們要先來學習一下C++的兩個小語法

  1. 關鍵字auto
  2. 范圍for循環

方便后面我們進行模擬實現。

在 C語言 和 C++ 中,auto 的含義有所不同:

C 語言中的 auto

auto: 是 C 語言的 存儲類型說明符,用于聲明具有 自動存儲期的局部變量

  • 具有自動存儲期的變量在進入聲明它的程序塊時被創建,在該程序塊活動時存在,退出程序塊時被撤銷。

  • 在函數內部定義的變量,若未聲明為其他存儲類型(staticregisterextern ),默認就是自動變量,所以實際中auto關鍵字常被省略 。例如int a = 0;auto int a = 0; 是等價的。

  • 另外

    • 注意一:用auto聲明變量時可不進行初始化。
    • 注意二:當省略數據類型時,auto修飾的變量默認為int型 。

C++中的 auto

  • C++98 和 C++03 標準:與 C 語言中 auto 的含義一致,用于聲明自動變量,但因即使不使用 auto 聲明,變量也擁有自動生命期,所以該用法多余且極少使用 。

  • C++11 及以后標準auto 被重新定義為自動推斷變量類型的 類型指示符

    • 使用 auto 定義變量時必須進行初始化。

    • 在編譯階段,編譯器會根據初始化表達式來推導 auto 實際代表的類型,此時 auto 只是一個類型聲明時的 “占位符” 。

      auto num = 10; // num會被推導為int類型
      auto str = std::string("hello"); // str會被推導為std::string類型
      

在 C++ 后續標準中,auto 的功能進一步擴展:

C++14

  • auto可用于推導普通函數的返回類型

    • 例如auto func() { return 42; } ,編譯器會根據return語句推導出函數返回類型為int
  • auto可作為泛型 Lambda 表達式的參數類型提高代碼復用性

C++17

  • 引入模板參數推導,允許使用 auto 指定函數模板參數類型時,編譯器可根據實參推導模板參數類型
  • 引入結構化綁定,允許使用 auto 解構數組結構體tuple方便訪問復合數據類型元素

總結:auto 在 C++ 中的應用,尤其是在編寫模板代碼或處理復雜類型時,能大大簡化代碼編寫,提高編程效率 。

2. 使用關鍵字auto時需要注意什么?

在 C++ 中使用auto關鍵字時,需要注意以下幾點:

1. 必須初始化:

  • auto 必須通過初始化表達式推導類型,否則會導致編譯錯誤。

    auto x;       // 錯誤:未初始化,無法推導類型auto x = 10;  // 正確:根據10推導為int
    

2. 推導規則可能與預期不符:

(1)忽略頂層const引用

  • auto 會忽略初始化表達式的頂層const引用屬性,除非顯式指定

    const int a = 10;
    auto b = a;      // b的類型是int(忽略頂層const)
    auto& c = a;     // c的類型是const int&(保留const)int x = 10;
    int& ref = x;
    auto y = ref;    // y的類型是int(忽略引用)
    

(2)數組函數會退化為指針

  • 當初始化表達式是數組函數時,auto 會將其推導為指針類型除非使用decltype(auto)

    int arr[5] = {1, 2, 3, 4, 5};
    auto ptr = arr;  // ptr的類型是int*(數組退化為指針)
    

3. 聲明指針或引用時的語法差異

  • 指針類型:使用auto聲明指針時,autoauto*等價(*可加可不加),因為編譯器會根據初始化表達式自動推導為 指針類型

    int* p = new int(10);auto ptr1 = p;   // ptr1類型為int*
    auto* ptr2 = p;  // ptr2類型也為int*(與ptr1等價)
    
  • 引用類型:聲明引用時必須顯式使用&,否則auto會推導為 值類型(非引用)

    int x = 20;auto& ref = x;   // 正確:ref為int&(引用)
    auto val = x;    // 錯誤:val為int(值類型,非引用)
    

4. 同一行聲明多個變量時類型必須一致

當在同一行使用 auto 聲明多個變量時,所有變量的類型必須完全一致,否則會編譯報錯。

  • 因為:編譯器僅對第一個變量的類型進行推導,其他變量強制使用該類型。

    //錯誤示例:
    auto a = 10, b = 3.14;  // 錯誤:a推導為int,b推導為double(類型不一致)
    auto* p1 = &a, p2 = &b; // 若a和b類型不同,p2可能為不同類型的指針//正確示例:
    auto a = 10, b = 20;    // 正確:a和b均為int
    auto* p1 = &a, p2 = &b; // 正確:p1和p2均為int*(假設a和b為int)
    

5. 不能作為函數參數,但可作為返回值(謹慎使用)

  • 作為函數參數auto 無法用于函數參數的類型聲明。

    • 因為:函數參數需要明確的類型。

      // 錯誤示例:
      void func(auto x);  // 錯誤:auto不能作為函數參數類型
      
  • 作為函數返回值:C++14 允許auto作為函數返回類型(需通過return語句推導唯一類型),但需注意:

    • 函數體必須可見不能在頭文件中聲明后在源文件中定義

    • 若存在多個return語句,推導的類型必須一致

    auto add(int a, int b) // C++14及以后
    {  return a + b;  // 返回類型推導為int
    }
    

3. 怎么使用auto關鍵字?

代碼示例1

#include <iostream>
using namespace std;//可以作返回值,但建議謹慎使用(需確保返回類型明確)
auto func()
{return 3;  //返回類型被推導為int
}int main()
{cout << "============== 基礎類型推導 ==============" << endl;int a = 10;auto b = a;      // b的類型推導為intauto c = 'a';    // c的類型推導為charauto d = func(); // d的類型由func1()的返回類型決定//錯誤示例:auto變量必須初始化,編譯器無法推導未初始化變量的類型//auto e;  // 缺少初始化表達式// 打印類型信息(不同編譯器輸出可能不同)cout << "b的類型是:" << typeid(b).name() << endl;  //可能輸出"int"cout << "c的類型是:" << typeid(c).name() << endl;  //可能輸出"char"cout << "d的類型是:" << typeid(d).name() << endl;  //取決于func1()的返回類型cout << "============== 指針和引用推導 ==============" << endl;int x = 10;//知識點1:使用auto聲明指針時,auto和auto*等價(*可加可不加)auto y = &x;   // y的類型推導為int*auto* z = &x;  // 顯式指定指針類型,z的類型為int*//知識點2:聲明引用時必須顯式使用&auto& w = x;   // w的類型推導為int&cout << "y的類型是:" << typeid(y).name() << endl;  // int*cout << "z的類型是:" << typeid(z).name() << endl;  // int*cout << "w的類型是:" << typeid(w).name() << endl;  // 注意:這里輸出的是int,但是其實w的類型是:int&//因為:引用類型被 “剝除”:當對引用類型使用 typeid 時,返回的是被引用對象的類型,而非引用類型本身cout << "============== 多變量聲明限制 ==============" << endl;auto aa = 1, bb = 2;  // 合法:aa和bb都被推導為intcout << "aa的類型是:" << typeid(aa).name() << endl;  // intcout << "bb的類型是:" << typeid(bb).name() << endl;  // int//錯誤示例://auto cc = 3, dd = 4.0;  // cc是int,dd是double//auto多變量聲明時,所有變量必須推導為同一類型cout << "============== 數組類型限制 ==============" << endl;//錯誤示例:auto不能用于聲明數組類型//auto array[] = { 4, 5, 6 };return 0;
}

在這里插入圖片描述

代碼示例2

#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{/*------------------創建一個map字典------------------*/// 創建一個map字典,存儲英文單詞到中文的映射// key類型為std::string,value類型為std::stringstd::map<std::string, std::string> dict = {{ "apple", "蘋果" },  // 鍵值對1{ "orange", "橙子" }, // 鍵值對2 { "pear", "梨" }      // 鍵值對3};/*------------------創建一個迭代器------------------*/ //原始寫法(較冗長):// std::map<std::string, std::string>::iterator it = dict.begin();//使用auto自動推導迭代器類型(現代C++推薦寫法):auto it = dict.begin();  // it會被自動推導為std::map<std::string, std::string>::iterator類型/*------------------使用迭代器遍歷map字典------------------*/while (it != dict.end()){//1.輸出當前鍵值對//1.1:it->first 表示key(英文單詞)//1.2:it->second 表示value(中文翻譯)cout << it->first << ":" << it->second << endl;//2.移動到下一個元素++it;}return 0;
}

在這里插入圖片描述

--------------- 范圍for循環 ---------------

1. 什么是范圍for循環?

范圍for循環(Range-based for loop):是 C++11 引入的一種語法糖,用于簡化遍歷容器序列的過程。

  • 傳統的 for 循環需要顯式指定循環范圍,不僅代碼冗長,還容易因索引越界等問題引入錯誤,而基于范圍的 for 循環則提供了更簡潔、易讀的語法,避免了傳統 for 循環中迭代器索引的顯式使用,自動完成迭代過程。
  • 從實現原理上看,范圍 for 循環是迭代器模式的語法糖。 編譯器會自動將其轉換為等價的迭代器遍歷代碼,包括迭代器的獲取元素訪問邊界判斷。這種轉換在匯編層面表現為與手動編寫的迭代器代碼基本一致,因此不會引入額外的性能開銷。

2. 怎么使用范圍for循環?

范圍 for循環基本語法:

for (元素類型 變量名 : 容器/序列) 
{// 使用變量名訪問當前元素
}
  • declaration:定義一個變量,用于存儲每次迭代時從 range 中取出的元素。
  • range:表示要遍歷的范圍,可以是數組、容器(std::vectorstd::list)、初始化列表等。

范圍 for循環工作原理:

  • 迭代對象
    • 對于 數組,直接遍歷數組的每個元素。
    • 對于 標準庫容器vectormap),使用容器的begin()end()迭代器。
    • 對于 自定義類型,需提供begin()end()成員函數或全局函數。
  • 變量類型
    • 可使用 auto 自動推導元素類型
    • 若需修改元素值,應聲明為引用類型(auto&const auto&

代碼片段示例:

1. 遍歷數組

int arr[] = {1, 2, 3, 4, 5};
for (int num : arr) 
{std::cout << num << " ";  // 輸出: 1 2 3 4 5
}

2. 遍歷 vector

#include <vector>std::vector<int> vec = {1, 2, 3};
for (auto& num : vec) // 使用引用允許修改元素
{  num *= 2;
}

3. 遍歷 map

#include <map>std::map<int, std::string> dict = 
{{1, "one"}, {2, "two"}
};for (const auto& pair : dict) 
{std::cout << pair.first << ": " << pair.second << "\n";
}

4. 初始化列表

for (int x : {10, 20, 30}) 
{std::cout << x << " ";  // 輸出: 10 20 30
}

3. 范圍for循環有什么優勢?

#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{// 定義一個包含5個整數的數組int array[] = { 1, 2, 3, 4, 5 };/******************** C++98 風格的遍歷 ********************//** 傳統遍歷方式特點:* 1. 需要手動計算數組長度* 2. 使用下標訪問元素* 3. 需要維護循環變量i*///使用for循環修改數組中的元素for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i){array[i] *= 2;}//使用for循環輸出修改后的數組for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i){cout << array[i] << " ";}cout << endl;/******************** C++11 風格的遍歷 ********************//** 范圍for循環特點:* 1. 自動推導元素類型(使用auto)* 2. 自動處理數組邊界* 3. 代碼更簡潔*///使用引用修改元素(auto&)for (auto& e : array)e *= 2;  //使用值訪問元素(auto)for (auto e : array)cout << e << " ";cout << endl;/******************** 字符串遍歷示例 ********************/string str("hello world");/** 字符串遍歷說明:* 1. auto自動推導為char類型* 2. 不需要考慮字符串長度* 3. 可以方便地處理每個字符*/for (auto ch : str){cout << ch << " ";  // 輸出:h e l l o   w o r l d}cout << endl;return 0;
}

在這里插入圖片描述

--------------- 迭代器 ---------------

1. 什么是迭代器?

迭代器(Iterator):是一種抽象的編程概念,用于在容器(:數組、鏈表、集合、映射等)中遍歷元素,并訪問容器中的數據,而無需暴露容器的底層實現細節。

  • 它本質上是一個 “指針 - like” 的對象,提供了一種統一的方式來操作不同類型的容器,使得代碼可以不依賴于具體容器的內部結構,從而增強代碼的通用性和可移植性。

迭代器的核心作用:

  1. 遍歷容器元素
    迭代器可以像指針一樣逐一遍歷容器中的元素,支持向前或向后移動(取決于容器類型和迭代器種類)
  2. 訪問容器數據
    通過迭代器,可以讀取或修改容器中的元素(取決于迭代器的類型是否支持寫操作)
  3. 統一容器操作接口
    C++ 標準庫中的算法(如:sortfindfor_each 等)都依賴迭代器來操作容器,使得同一套算法可以適配不同類型的容器(如:vectorlistset 等)

2. 迭代器有哪些?

:迭代器可以根據不同的劃分方式劃分出不同的迭代器:下面的我們將介紹以下的兩種劃分方式。

2.1:按“功能強弱”進行劃分

類型功能支持操作
輸入迭代器只能讀取 容器元素
單向移動(只能遞增)
不支持重復讀取(類似一次性指針)
++it(遞增)
*it(解引用讀取)
==!=(比較)
輸出迭代器只能寫入 容器元素
單向移動(只能遞增)
不支持讀取
++it(遞增)
*it = value(賦值寫入)
前向迭代器支持 讀取和寫入(若容器允許)
單向移動
多次訪問 同一元素
輸入迭代器
+
可保存狀態(如多次解引用同一迭代器)
雙向迭代器支持 前后雙向 移動(遞增和遞減)前向迭代器
+
--it(遞減)
隨機訪問迭代器支持 隨機訪問 元素(類似指針算術運算)
可直接跳躍到任意位置
雙向迭代器
+
it + nit - n
it[n]
it1 - it2(計算距離)
<, <=, >, >=(比較大小)

在這里插入圖片描述

2.2:按“讀寫權限+遍歷方向”進行劃分

迭代器類型說明典型獲取方式
iterator可讀寫正向遍歷 容器元素的迭代器
在容器中正常順序地訪問和修改元素
begin()end()
const_iterator只讀正向遍歷 容器元素的迭代器
用于在不修改容器元素的情況下,按正常順序遍歷容器
cbegin()cend()
reverse_iterator可讀寫反向遍歷 容器元素的迭代器
用于以逆序方式訪問和修改容器元素
rbegin()rend()
const_reverse_iterator只讀反向遍歷 容器元素的迭代器
用于在不修改容器元素的前提下,逆序遍歷容器
crbegin()crend()

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

3. 怎么使用迭代器?

#include <iostream>
#include <string>
using namespace std;int main()
{string s("Hello, World!");cout << "原始字符串: " << s << endl << endl;/*------------------使用iterator正向遍歷(可讀寫)------------------*/cout << "iterator 正向遍歷: ";for (string::iterator it = s.begin(); it != s.end(); ++it) {cout << *it;		 //讀取元素*it = toupper(*it);  //修改元素(轉換為大寫)}cout << endl << "修改后的字符串: " << s << endl << endl;/*------------------使用const_iterator正向遍歷(只讀)------------------*/cout << "const_iterator 正向遍歷: ";for (string::const_iterator cit = s.cbegin(); cit != s.cend(); ++cit) {cout << *cit;  //只讀訪問//*cit = 'x';  //錯誤:不能通過const_iterator修改}cout << endl << endl;/*------------------使用reverse_iterator反向遍歷(可讀寫)------------------*/cout << "reverse_iterator 反向遍歷: ";for (string::reverse_iterator rit = s.rbegin(); rit != s.rend(); ++rit) {cout << *rit;		   //反向讀取元素*rit = tolower(*rit);  //修改元素(轉換為小寫)}cout << endl << "再次修改后的字符串: " << s << endl << endl;/*------------------使用const_reverse_iterator反向遍歷(只讀)------------------*/cout << "const_reverse_iterator 反向遍歷: ";for (string::const_reverse_iterator crit = s.crbegin(); crit != s.crend(); ++crit) {cout << *crit;   //反向只讀訪問// *crit = 'x';  //錯誤:不能修改}cout << endl;return 0;
}

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

ionic 切換開關操作指南

ionic 切換開關操作指南 引言 在移動應用開發中&#xff0c;切換開關&#xff08;Toggle&#xff09;是一種常見的用戶界面元素&#xff0c;它允許用戶通過簡單的操作來開啟或關閉某個功能或設置。在Ionic框架中&#xff0c;切換開關提供了豐富的API和樣式&#xff0c;使得開發…

【筆記記錄-Linux文件權限與目錄結構詳解】

&#x1f308;個人主頁: Aileen_0v0 &#x1f525;熱門專欄: 華為鴻蒙系統學習|計算機網絡|數據結構與算法 ?&#x1f4ab;個人格言:“沒有羅馬,那就自己創造羅馬~” 文章目錄目錄結構解析Summarypart3part4part5目錄結構解析 drwxr-xr-x 2 student student 4096 10月 8 2023…

【Complete Search】-基礎完全搜索-Basic Complete Search

文章目錄Solution - Maximum Distance涉及遍歷整個解空間的問題資料-resources 6 - Complete Search 在很多問題中&#xff08;尤其是在 USACO Bronze 級別&#xff09;&#xff0c;只需檢查解空間中的所有可能情況就足夠了&#xff0c;比如所有元素、所有元素對、所有子集&…

神經網絡的層與塊

什么是層&#xff1f;什么是塊&#xff1f;在深度學習中&#xff0c;層&#xff08;Layer&#xff09; 和塊&#xff08;Block&#xff09; 是構建神經網絡的核心概念&#xff0c;尤其在 PyTorch、TensorFlow 等框架中&#xff0c;二者既緊密關聯又有明確分工。理解它們的定義、…

如何用Qt寫一個安卓Android應用

對于不會安卓開發的同胞來講(比如我)&#xff0c;想要做一個安卓應用(.apk)使用Qt是一個不錯的方法&#xff0c;今天就來聊聊如何使用Qt結合C寫一個安卓應用。 首先我們得擁有一個Qt,我使用的是5.14.2版本的&#xff0c;新版本可直接到qt官網去下載qt.io,老版本的現在qt官網不支…

泰語OCR識別技術方案

一、痛點分析1.1 泰語文字特性帶來的挑戰復雜字符集&#xff1a;泰語有44個輔音字母、15個元音符號、4個聲調符號和10個數字&#xff0c;組合形式多樣上下疊加結構&#xff1a;泰文字符常在垂直方向疊加組合&#xff0c;增加分割難度無詞間空格&#xff1a;泰語單詞間無明確分隔…

MER-Factory:多模態情感識別與推理數據集自動化工廠工具介紹

&#x1f6e0;? 工具 如果這個項目對你有幫助&#xff0c;歡迎給 https://github.com/Lum1104/MER-Factory/ 倉庫點一個 Star &#x1f31f; &#xff0c;這對我們幫助很大 MER-Factory 提供交互式工具來幫助您管理數據和配置處理流水線。 調優儀表板 調優儀表板 是一個基…

Python基礎數據結構詳解:字符串、列表、元組和字典的常用方法

目錄 一、引言&#xff1a;為什么學習這些數據結構&#xff1f; 二、字符串&#xff08;String&#xff09;的常用方法 1. 基本操作 2. 查找索引 3. 大小寫轉換 4. 位置調整 5. 開頭和結尾檢查 6. 分割和連接 7. 刪除空白字符 8. 類型判定 9. 替換內容 字符串小結 …

Liunx練習項目5.1-周期化任務;時間同步服務;

1.系統周期化任務1.1 at命令的用法at 時間 指定在規定的時間上執行相應的操作&#xff0c;完成操作crtlD完成編輯一分鐘后輸入的指令完成&#xff0c;創建了file{1..5}的文件at -l 查看系統上面所有用戶的調度at -c 可以查看該任務的指令at -d 加編號可以刪除該任務at -v 可以…

小皮面板搭建pikachu靶場

一、搭建所需的工具 1.下載小皮面板 下載地址為&#xff1a;小皮面板(phpstudy) - 讓天下沒有難配的服務器環境&#xff01; 2.下載靶場所需的文件 下載地址為&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 二、環境的搭建 打開小皮面板&#xff0c;使用所…

使用aiohttp實現高并發爬蟲

使用aiohttp來編寫一個高并發的爬蟲&#xff0c;想法很不錯&#xff0c;現實很骨感。這里我們要知道&#xff0c;由于高并發可能會對目標服務器造成壓力&#xff0c;請確保遵守目標網站的robots.txt&#xff0c;并合理設置并發量&#xff0c;避免被封IP。 我將通過示例代碼&…

【Linux庖丁解牛】— 信號量ipc管理!

1. 并發編程概念鋪墊> 多個執行流【進程】看到同一份資源&#xff1a;共享資源。> 被保護起來的資源叫做臨界資源。> 在進程中&#xff0c;涉及臨界資源的程序段叫做臨界區。【說人話就是程序中訪問共享資源的代碼】> 什么是互斥&#xff1a;任何時刻&#xff0c;只…

Spring Boot全局異常處理詳解

原代碼&#xff1a;package com.weiyu.exception;import com.weiyu.pojo.Result; import com.weiyu.utils.ErrorFileResponseUtils; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import …

FHE技術將徹底改變在線隱私保護方式

1. 在線隱私的簡史 互聯網剛剛誕生時&#xff0c;所有的內容都是未加密的。人們通過一個特定的地址訪問網站&#xff0c;這個地址以“HTTP”開頭。當時&#xff0c;這并不是什么大問題&#xff0c;因為人們在線訪問的都是內容&#xff0c;而這些內容本身已經是公開的。但隨著電…

Cursor配置Java環境、創建Spring Boot項目

一&#xff1a;配置JDK和Maven cursor默認會讀取環境變量JAVA_HOME和MAVEN_HOME&#xff0c;如果沒有配置去找默認路徑~/.m2/settings.xml也可以手動指定&#xff1a;Ctrl Shift P 輸入"Preferences:Open User Settings(JSON)"打開settings.json文件&#xff0c;然…

win11添加無線顯示器(兩個筆記本實現雙屏)

前置條件&#xff1a; 兩個筆記本要要支持無線顯示器&#xff0c;支持藍牙&#xff1b; 1、自己重裝的win11系統&#xff0c;首先根據網上說明進去的時候&#xff0c;紅色顯示無無線投屏&#xff1b; 2、安裝網上操作&#xff0c;查看自己電腦是否支持無線投屏&#xff08;是支…

【MAC技巧】Bash/Zsh切換失敗的故障排除

【MAC技巧】Bash/Zsh切換失敗的故障排除 Troubleshooting to Failure " chsh: no changes made" By JacksonML 在Mac電腦中&#xff0c;終端(Terminal)是常用的命令行工具&#xff0c;對開發和運維至關重要。 依照蘋果電腦的系統軟件迭代&#xff0c;終端中存有B…

卷積神經網絡-卷積的分類

卷積的定義卷積是圖像處理中最核心的操作之一&#xff0c;其本質是通過卷積核&#xff08;濾波器&#xff09;與圖像進行滑動窗口計算&#xff08;像素值乘積之和&#xff09;&#xff0c;實現對圖像特征的提取、增強或抑制。一、二維卷積--針對二維矩陣進行處理1.1單通道見得最…

全網首發:使用GIT下載時崩潰退出,是因為機械硬盤

前面有幾篇文章&#xff0c;說是GIT下載會退出。開始以為是虛擬機問題。把家里的虛擬機復制到公司&#xff0c;照樣崩潰。后來認為是內存不足。昨天在家里下載代碼&#xff0c;也崩潰退出。心里覺得奇怪&#xff0c;試了一次&#xff0c;還是退出。差別在哪里&#xff1f;之前是…

YAML 自動化用例中 GET vs POST 請求的參數寫法差異

GET 請求&#xff1a;用 params 傳參&#xff08;附加在 URL 上&#xff09; config:name: "GET 查詢用戶信息"base_url: "https://api.example.com"teststeps:- name: "根據 userId 查詢用戶信息"request:method: GETurl: /api/user/detailpara…