leetcode中使用c++需要注意的點以及各類容器的初始化、常用成員函數

目錄

  • 1、傳引用
  • 2、vector使用
    • 初始化方法
    • 常用成員函數
  • 3、字符串string
    • 初始化方法
    • 常用成員函數
  • 4、哈希表 unordered_map
    • 初始化
    • 常用成員函數
    • 示例:計數器
  • 5、哈希集合 unordered_set
    • 初始化
    • 常用成員函數
  • 6、隊列 queue
    • 初始化
    • 成員函數
  • 7、棧stack
    • 初始化
    • 常用成員函數
  • 7、emplace_back 與 push_back的區別
  • 8、vector 中“=”是深復制,拷貝構造也是深復制
  • 8、vector swap()、assign()用法

1、傳引用

C++函數參數默認是傳值的,如果使用數組之類的容器作為參數,一般會加上&符號表示傳引用。
沒有加&,就是傳值,會涉及到數據復制。在遞歸函數中,每次遞歸都會復制一遍容器,非常耗時

2、vector使用

初始化方法

//初始化一個int型的空數組nums
vector<int> nums;//初始化一個大小為n的數組nums,數組中的值默認為0
vector<int> nums(n);//初始化一個元素為1、2、3的數組nums
vector<int> nums{1,3,5};
//初始化一個大小為n的數組nums,其值全都為2
vector<int> nums(n,2);//初始化一個二維int數組dp
vector<vector<int>> dp;//初始化一個大小為m * n的布爾數組dp
//值均為true
vector<vector<bool>> dp(m,vector<bool>(n,true));

常用成員函數

//返回數組是否為空
bool vector.empty()//返回元素個數
size_type vector.size()//返回數組中最后一個元素的引用
reference vector.back()//在數組尾部插入一個元素val
void vector.push_back(val);//刪除數組尾部元素
void pop_back();

3、字符串string

初始化方法

//s是一個空字符串
string s;
//s是字符串"abc"
stirng s = "abc";

常用成員函數

//返回字符串長度
size_t s.size()//判斷字符串是否為空
bool s.empty()//在字符串尾部插入一個字符
void s.push_back(char c);//刪除字符串尾部字符
void pop_back()//返回從索引pos開始,長度為len的子字符串
string substr(size_t pos, size_t len)//判斷兩個字符串是否相等
bool s1 == s2

4、哈希表 unordered_map

初始化

//初始化一個key為int,value為int的哈希表
unordered_map<int,int> hash_map;//初始化一個key為string,value為int數組的哈希表
unordered_map<string,vector<int>> hash_map;

常用成員函數

//返回哈希表鍵值對個數
size_type hash_map.size();//返回哈希表是否為空
bool hash_map.empty();//返回哈希表中key出現的次數
//因為哈希表不會出現重復的鍵,所以該函數只可能返回0或1
//可以用來判斷key是否存在與哈希表中
size_type hash_map.count(key);//通過key清除哈希表中的鍵值對
size_type hash_map.erase(key);

需要注意的點:對于unordered_map,使用方括號[]訪問鍵key時,如果key不存在,則會自動創建key,對應的值為默認值。

示例:計數器

vector<int> nums{1,1,3,4,5,3,6};unordered_map<int,int> counter;
for(int num : nums)
{//可以通過[]直接訪問或修改對應的鍵counter[num]++;
}
//遍歷哈希表中的鍵值對
for(auto& it : counter)
{int key = it.first;int val = it.second;cout << key << ": " << val << endl;
}

上面的counter[num]++;實際對應了下面語句:

for(int num : nums)
{if(!counter.count(num)) counter[num] = 0;counter[num]++;
}

5、哈希集合 unordered_set

初始化


//初始化一個存儲int的哈希集合 
unordered_set<int> visited;//初始化一個存儲string的哈希集合
unordered_set<string> visited;

常用成員函數

//返回哈希表的鍵值對個數
size_type unordered_set.size();//返回哈希表是否為空
bool unordered_set.empty();//類似哈希表,如果key存在則返回1,否則返回0
size_type unordered_set.count(key);//向集合中插入一個元素key
pair<iterator,bool> unordered_set.insert(key);//刪除哈希集合中的元素key
//如果刪除成功返回1,如果key不存在返回0
size_type unordered_set.erase(key);

6、隊列 queue

初始化

//初始化一個存儲int的隊列
queue<int> q;//初始化一個存儲string的隊列
queue<string> q;

成員函數

//返回隊列是否為空
bool q.empty();//返回隊列中元素個數
size_type q.size();//將元素加入隊尾
void q.push(val);//返回隊頭元素的引用
value_type& front();//刪除隊頭元素
void pop();

需要注意的是,隊列pop方法一般是void類型的,不會同時返回被刪除的元素,所以,如果想用被刪除的元素,得先取出來;

int e = q.front();
q.pop();

7、棧stack

初始化

//初始化一個存儲int的堆棧
stack<int> stk;//初始化一個存儲string的堆棧
stack<string> stk;

常用成員函數

//返回堆棧是否為空
bool stk.empty();//返回堆棧中元素的個數
size_type stk.size();//在棧頂添加元素
void stk.push(val);//返回棧頂元素的引用
value_type& stk.top();//刪除棧頂元素
void stk.pop();

7、emplace_back 與 push_back的區別

摘自https://www.jianshu.com/p/adf58f9fad84
emplace_back和push_back都有往容器后面插入一個元素的作用
不同的是
emplace_back() 和 push_back() 的區別,就在于底層實現的機制不同。push_back() 向容器尾部添加元素時,首先會創建這個元素,然后再將這個元素拷貝或者移動到容器中(如果是拷貝的話,事后會自行銷毀先前創建的這個元素);而 emplace_back() 在實現時,則是直接在容器尾部創建這個元素,省去了拷貝或移動元素的過程

8、vector 中“=”是深復制,拷貝構造也是深復制

兩個vector的地址并不相同:

int main()
{int w = 100;int h = 20;vector<int> dataA(w * h, 0Xff);vector<int> dataB = dataA; // copy 構造int* ptr0 = &dataA[0];int* ptr1 = &dataB[0];cout << ptr0 << endl;cout << ptr1 << endl;return 0;
}

在這里插入圖片描述

8、vector swap()、assign()用法

利用swap()函數(交換兩個vector)

vector<int> array{3, 5, 2, 6, 4};
vector<int> outArray{ 1,2,3 };
outArray.swap(array);//outArray={3,5,2,6,4};array={1,2,3}

利用assign()函數(清空并深復制)

vector<int> array{3, 5, 2, 6, 4};
vector<int> outArray{ 1,2,3 };
outArray.assign(array.begin(),array.end());//清空原數據,賦予新數據={3,5,2,6,4}
outArray.assign(5, 0);//5個0,清空原數據={0,0,0,0,0,}

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

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

相關文章

Linq list 排序,Dictionary 排序

C# 對List成員排序的簡單方法 http://blog.csdn.net/wanzhuan2010/article/details/6205884 LINQ之路系列博客導航 http://www.cnblogs.com/lifepoem/archive/2011/12/16/2288017.html 用一句Linq把一個集合的屬性值根據條件改了&#xff0c;其他值不變 list去重 list.Where((x…

javascript Ajax 同步請求與異步請求的問題

先來看以下代碼&#xff1a; var flagtrue; var index0; $.ajax({url: "http://www.baidu.com/",success: function(data){flagfalse;} }); while(flag){index; } alert(index); 請問最后alert的index的結果是多少&#xff1f; 可能有人會說0唄。實際上卻沒那么簡單…

定義類的Python示例

The task to define a class in Python. 在Python中定義類的任務。 Here, we are defining a class named Number with an attribute num, initializing it with a value 123, then creating two objects N1 and N2 and finally, printing the objects memory locations and a…

十一、線性層

一、Linear Layers torch.nn.Linear(in_features, out_features, biasTrue, deviceNone, dtypeNone) 以VGG神經網絡為例&#xff0c;Linear Layers可以將特征圖的大小進行變換由(1,1,4096)轉換為(1,1,1000) 二、torch.nn.Linear實戰 將CIFAR-10數據集中的測試集二維圖像[6…

easyui plugin——etreegrid:CRUD Treegrid

昨天寫了一個koeasyui的同樣的實現&#xff0c;感覺寫的太亂&#xff0c;用起來十分麻煩&#xff0c;于是今天照著edatagrid&#xff0c;寫了一個etreegrid&#xff0c;這樣再用ko綁定就方便多了。 使用很簡單,$(tableId).etreegrid({idField:parentIdField:,treeField:,saveUr…

expr

expr在linux中 是一個功能非常強大的命令。通過學習做一個小小的總結。 1、計算字符串的長度。我們可以用awk中的length(s)進行計算。我們 也可以用echo中的echo ${#string}進行計算&#xff0c;當然也可以expr中的expr length $string 求出字符串的長度。舉 例[rootlocalhost …

leetcode 42. 接雨水 思考分析(暴力、動態規劃、雙指針、單調棧)

目錄題目思路暴力法動態規劃雙指針法單調棧題目 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 輸入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 輸出&#xff1a;6 解釋&#xff1a;上面是由數組…

chdir函數_PHP chdir()函數與示例

chdir函數PHP chdir()函數 (PHP chdir() function) The full form of chdir is "Change Directory", the function chdir() is used to change the current working directory. chdir的完整形式是“更改目錄” &#xff0c; 功能chdir()用于更改當前工作目錄。 Synt…

十二、Sequential

一、Sequential介紹 torch.nn.Sequential(*args) 由官網給的Example可以大概了解到Sequential是將多層網絡進行便捷整合&#xff0c;方便可視化以及簡化網絡復雜性 二、復現網絡模型訓練CIFAR-10數據集 這里面有個Hidden units隱藏單元其實就是連個線性層 把隱藏層全部展開整…

1064-快速排序

描述 給定輸入排序元素數目n和相應的n個元素&#xff0c;寫出程序&#xff0c;利用內排序算法中快速排序算法進行排序&#xff0c;并輸出排序最后結果的相應序列。 輸入 共兩行&#xff0c;第一行給出排序元素數目n&#xff0c;第二行給出n個元素&#xff0c;1≤n≤100000&…

社交問答:取代BBS的Web2.0革命

編者按&#xff1a;本文由樂維UP創始人俞越撰寫&#xff0c;你也可以點擊這里關注俞越的新浪微博。 BBS在中國的興起是在95年&#xff0c;之后以驚人的速度發展起來。從2011年開始&#xff0c;國內的問答社區也如當年的BBS一樣&#xff0c;大量涌現快速成長&#xff0c;大體分為…

單調棧 leetcode整理(三)

目錄42. 接雨水思路分析901. 股票價格跨度思路581. 最短無序連續子數組思路一&#xff1a;排序雙指針思路二&#xff1a;單調棧思路三&#xff1a;雙指針(最省時)42. 接雨水 42. 接雨水 給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖&#xff0c;計算按此排列的柱子&…

python 摳圖 鋸齒_Python | 繪圖中的抗鋸齒

python 摳圖 鋸齒Antialiasing is another important feature of Matplotlib and in this article, we will review how to use this functionality. pyplot.antialiased() is an inbuilt function in matplotlib.pyplot which performs our required operation. 抗鋸齒是Matpl…

apk 反編譯

引用&#xff1a;http://code.google.com/p/dex2jar/issues/detail?id20 最新版:dex2jar http://code.google.com/p/dex2jar/downloads/list 錯誤&#xff1a;http://code.google.com/p/dex2jar/issues/detail?id20 這段時間在學Android應用開發&#xff0c;在想既然是用Jav…

OpenDiscussion_DataDrivenDesign

本文源于公司內部技術交流&#xff0c;如有不當之處&#xff0c;還請指正。 Content&#xff1a; 1. What is Data-driven design?2. WPF revolution.3. More about ObservableCollection.4. Question.1. What is Data-driven design?Data-driven design: is a design of usi…

十三、Loss Functions

一、Loss Functions損失函數 損失函數的作用&#xff1a; 1&#xff0c;損失函數就是實際輸出值和目標值之間的差 2&#xff0c;由這個差便可以通過反向傳播對之后的數據進行更新 Loss Functions官網給的API 里面由很多種損失函數&#xff0c;不同的損失函數有其不同的用途及表…

leetcode 滑動窗口小結 (一)

目錄小結以及代碼框架76. 最小覆蓋子串滑動窗口代碼以及注釋567. 字符串的排列滑動窗口438. 找到字符串中所有字母異位詞3. 無重復字符的最長子串化簡框架reference小結以及代碼框架 滑動窗口技巧屬于雙指針技巧。 該算法的思路為維護一個窗口&#xff0c;不斷滑動&#xff0c…

linux命令行界面_Linux中的命令行界面

linux命令行界面If you are like most people, you are probably most familiar with using a Graphical User Interface (GUI) to control your computer. Introduced to the masses by Apple on the Macintosh computer and popularized by Microsoft, a GUI provides an eas…

一道小小面試題的細節分析

一道小小面試題的細節分析 今天突然想到以前遇到的一個問題&#xff0c;題目如下&#xff08;可能絕大多數人都遇到過&#xff09;&#xff1a; 1 class A2 {3 public A()4 {5 PrintFields();6 }7 public virtual void Pr…

十四、OPTIM

一、torch.optim torch.optim.Optimizer(params, defaults)優化器官網說明 由官網給的使用說明打開看出來優化器實驗步驟&#xff1a; ①構造選擇優化器 例如采用隨機梯度下降優化器SGD torch.optim.SGD(beyond.parameters(),lr0.01)&#xff0c;放入beyond模型的參數param…