日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数

發(fā)布時間:2023/12/1 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

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

1、傳引用

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

2、vector使用

初始化方法

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

常用成員函數(shù)

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

3、字符串string

初始化方法

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

常用成員函數(shù)

//返回字符串長度 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數(shù)組的哈希表 unordered_map<string,vector<int>> hash_map;

常用成員函數(shù)

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

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

示例:計數(shù)器

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

上面的counter[num]++;實際對應(yīng)了下面語句:

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;

常用成員函數(shù)

//返回哈希表的鍵值對個數(shù) 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;

成員函數(shù)

//返回隊列是否為空 bool q.empty();//返回隊列中元素個數(shù) 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;

常用成員函數(shù)

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

7、emplace_back 與 push_back的區(qū)別

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

8、vector 中“=”是深復(fù)制,拷貝構(gòu)造也是深復(fù)制

兩個vector的地址并不相同:

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

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

利用swap()函數(shù)(交換兩個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()函數(shù)(清空并深復(fù)制)

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

總結(jié)

以上是生活随笔為你收集整理的leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。