算法題中常用的C++功能

文章目錄

    • 集合
    • 優先隊列
    • 雙端隊列
    • 排序時自定義比較函數
    • 最大數值
    • 字符串
      • 追加:
      • 刪除:
      • 子串:
    • 元組
    • vector
      • 查找
      • 創建和初始化賦值:
    • 字典map
      • 引入頭文件
      • 定義和初始化
      • 插入元素
      • 訪問元素
      • 更新元素
      • 刪除元素
      • 檢查元素存在
      • 遍歷元素
      • int和string轉換

集合

無重復字符的最長子串

unordered_set<char> occ;
occ.erase(s[i - 1]);
occ.insert(s[rk + 1]);
occ.count(s[rk + 1]);

優先隊列

滑動窗口最大值

priority_queue<pair<int, int>> Q;
Q.push({nums[i + k - 1], i + k - 1});
Q.top()
Q.pop();
  • 優先隊列自定義比較函數
    前k個高頻元素
struct ComparePairFirst {bool operator()(const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) const {return lhs.second > rhs.second;}
};
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, ComparePairFirst> pq;

雙端隊列

滑動窗口最大值

deque<int> q;
q.front()
q.back()
q.push_front()
q.pop_front()
q.push_back()
q.pop_back()

排序時自定義比較函數

使用lambda表達式:

auto compare = [](int a, int b) { return a > b; };
std::priority_queue<int, std::vector<int>, decltype(compare)> ascendingPQ(compare);

使用結構體:

sort(intervals.begin(), intervals.end(),[](const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}); //小頂堆

最大數值

#include <climits>
INT_MAX

字符串

追加:

  1. 使用運算符 +=
std::string str = "example";
str += 'a';  // 現在 str 是 "examplea"
  1. 使用 append 成員函數:
std::string str = "example";
str.append(1, 'a');  // 現在 str 是 "examplea"

這里,append 函數的第一個參數是追加字符的數量(在這個例子中是1),第二個參數是要追加的字符。

刪除:

在C++中,要刪除std::string類型的字符串的最后一個字符,可以采用以下幾種方法:

  1. 使用 pop_back() 方法:

    std::string str = "example";
    str.pop_back();  // 刪除最后一個字符,現在 str 是 "exampl"
    

    pop_back()函數直接刪除字符串末尾的字符。

  2. 使用 erase() 方法:

    std::string str = "example";
    str.erase(str.length() - 1);  // 或者 str.erase(str.end() - 1);
    // 刪除最后一個字符,現在 str 是 "exampl"
    

    erase()方法可以刪除指定位置的字符或字符范圍,這里用來刪除最后一個字符。

子串:

std::string str = "Hello, World!";
std::string subStr = str.substr(7, 5);  // 從第7個字符開始,取5個字符長度的子串

元組

腐爛的橘子

queue<tuple<int, int, int>> q;
q.push({i, j, 0});
x = get<0>(ele);

vector

查找

std::vector<int>::iterator pos = std::find(vec.begin(), vec.end(), 3);
if(pos != vec.end()) {std::cout << "找到了元素3" << std::endl;
} else {std::cout << "沒有找到元素3" << std::endl;
}int lastElement = vec.back();

創建和初始化賦值:

std::vector<std::vector<int>> table(nums.size() + 1, std::vector<int>(target + 1, 0));

字典map

引入頭文件

#include <unordered_map>

定義和初始化

定義一個空的unordered_map

std::unordered_map<std::string, int> myMap;

或者定義并初始化一些元素:

std::unordered_map<std::string, int> myMap = {{"apple", 1},{"banana", 2},{"cherry", 3}
};

插入元素

使用insert方法插入元素:

myMap.insert({"grape", 4});

也可以使用下標操作符[]插入,如果鍵不存在則插入,存在則修改其值:

myMap["orange"] = 5;

訪問元素

通過鍵訪問對應的值,如果鍵不存在,使用下標操作符會自動插入默認值(對于內置類型如int,默認為0):

int value = myMap["apple"];

使用find方法查找鍵,返回一個迭代器:

auto it = myMap.find("banana");
if (it != myMap.end())
{std::cout << "Found: " << it->first << " -> " << it->second << std::endl;
}
else
{std::cout << "Not found!" << std::endl;
}

更新元素

直接通過下標操作符更新:

myMap["apple"] = 10;  // 如果鍵存在,則更新其值

刪除元素

使用erase方法刪除元素,可以通過鍵或迭代器刪除:

myMap.erase("banana");
// 或者
myMap.erase(it);

檢查元素存在

使用count方法檢查鍵是否存在:

if (myMap.count("pear"))
{std::cout << "Pear exists in the map." << std::endl;
}
else
{std::cout << "Pear does not exist in the map." << std::endl;
}

或使用find后檢查迭代器是否等于end()

遍歷元素

使用范圍基礎for循環遍歷:

for (const auto &pair : myMap)
{std::cout << pair.first << ": " << pair.second << std::endl;
}

int和string轉換

字符串解碼

stack<string> stk;
stk.push(to_string(mul));
int old_mul = stoi(stk.top()); stk.pop();

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

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

相關文章

Ubuntu20.04更新GLIBC到2.35版本

目錄 1 背景2 增加源2.1 標準源2.2 鏡像源 3 更新 1 背景 Ubuntu20.04默認GLIBC庫版本是2.31.今天碰到一個軟件需要2.35版本的GLIBC。 升級GLIBC庫有兩種方式&#xff1a; 下載高版本庫源碼&#xff0c;編譯后替換系統中低版本庫。由于GLIBC庫是Linux系統中最基礎庫&#xff…

你想活出怎樣的人生?

hi~好久不見&#xff0c;距離上次發文隔了有段時間了&#xff0c;這段時間&#xff0c;我是裸辭去感受了一下前端市場的水深火熱&#xff0c;那么這次咱們不聊技術&#xff0c;就說一說最近這段時間的經歷和一些感觸吧。 先說一下自己的個人情況&#xff0c;目前做前端四年&am…

深圳技術大學oj C : 生成r子集

Description 輸出給定序列按字典序的 &#xfffd; 組合&#xff0c;按照所有 &#xfffd; 個元素出現與否的 01 標記串 &#xfffd;&#xfffd;&#xfffd;&#xfffd;?1,...,&#xfffd;1 的字典序輸出. 此處01串的字典序指&#xff1a;先輸入的數字對應低位&#x…

移動智能終端數據安全管理方案

隨著信息技術的飛速發展&#xff0c;移動設備已成為企業日常運營不可或缺的工具。特別是隨著智能手機和平板電腦等移動設備的普及&#xff0c;這些設備存儲了大量的個人和敏感數據&#xff0c;如銀行信息、電子郵件等。員工通過智能手機和平板電腦訪問企業資源&#xff0c;提高…

【HICE】web服務搭建3

端口號的不同進行監聽 1.下載httpd協議&#xff1a;dnf install httpd -y 2.編輯vhost.conf cd /etc/httpd cd /conf.d [rootlocalhost conf.d]# cat 1.conf listen 9090 listen 9091 listen 9092 <directory /www> allowoverride none require all granted </d…

【機器學習】Datawhale-AI夏令營分子性質AI預測挑戰賽

參賽鏈接&#xff1a;零基礎入門 Ai 數據挖掘競賽-速通 Baseline - 飛槳AI Studio星河社區 一、賽事背景 在當今科技日新月異的時代&#xff0c;人工智能&#xff08;AI&#xff09;技術正以前所未有的深度和廣度滲透到科研領域&#xff0c;特別是在化學及藥物研發中展現出了巨…

SpringBoot+Vue集成AOP系統日志

新建logs表 添加aop依賴 <!-- aop依賴--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 新建獲取ip地址工具類 import javax.servlet.http.H…

React 函數式組件里面有生命周期嗎?沒有怎么辦?

React 函數式組件沒有像類組件那樣傳統的生命周期方法&#xff0c;但是通過 React Hooks&#xff0c;可以在函數式組件中實現類似的生命周期行為。 useEffect: 可以看作是類組件里的 componentDidMount, componentDidUpdate 和 componentWillUnmount 的結合體。它允許你在函數組…

在Linux環境下使用sqlite3時,如果嘗試對一個空表進行操作(例如插入數據),可能會遇到表被鎖定的問題。

在Linux環境下使用sqlite3時&#xff0c;如果嘗試對一個空表進行操作&#xff08;例如插入數據&#xff09;&#xff0c;可能會遇到表被鎖定的問題。這通常是因為sqlite3在默認情況下會對空表進行“延遲創建”&#xff0c;即在實際需要寫入數據之前&#xff0c;表不會被真正創建…

React Native V0.74 — 穩定版已發布

嗨,React Native開發者們, React Native 世界中令人興奮的消息是,V0.74剛剛在幾天前發布,有超過 1600 次提交。亮點如下: Yoga 3.0New Architecture: Bridgeless by DefaultNew Architecture: Batched onLayout UpdatesYarn 3 for New Projects讓我們深入了解每一個新亮點…

java 利用 gdal 生成遙感tif的縮略圖

簡要說明 在java&#xff0c;簡單使用gdal生成tif文件的縮略圖 maven依賴 <!--需要安裝完gdal后&#xff0c;本地install gdal包才能使用 --><!--gdal安裝可參考 https://blog.csdn.net/qq_41613913/article/details/135743562 --><dependency><groupI…

Docker精華篇 - 常用命令大全,入門到精通!

大家好,我是CodeQi! 我們都知道 Docker 的重要性,以及 Docker 如何在軟件開發生命周期中發揮重要作用 。 說實話,學習 Docker 很有趣,至少在我看來是這樣。 一旦掌握了基礎知識,這并不難。 困難的是記住所有這些命令。 因此,在這篇文章中,我收集了所有命令,或者更…

Patch embed 的映射矩陣多大?

假設我們有一個圖像&#xff0c;其大小為 (H \times W \times C)&#xff0c;其中 (H) 是圖像的高度&#xff0c;(W) 是圖像的寬度&#xff0c;(C) 是圖像的通道數&#xff08;例如&#xff0c;RGB 圖像的通道數為 3&#xff09;。 將圖像劃分成 patches: 假設我們將圖像劃分成…

命令可以不通過數據綁定進行配置

命令可以不通過數據綁定進行配置。在某些情況下&#xff0c;可能希望直接在代碼隱藏文件中處理命令邏輯&#xff0c;而不是通過數據綁定。以下是一個完整的例子&#xff0c;展示了如何在不使用數據綁定的情況下實現命令。 ### 1. 定義命令 首先&#xff0c;我們定義一個簡單的…

四十篇:內存巨擘對決:Redis與Memcached的深度剖析與多維對比

內存巨擘對決&#xff1a;Redis與Memcached的深度剖析與多維對比 1. 引言 在現代的系統架構中&#xff0c;內存數據庫已經成為了信息處理的核心技術之一。這類數據庫系統的高效性主要來源于其對數據的即時訪問能力&#xff0c;這是因為數據直接存儲在RAM中&#xff0c;而非傳統…

js學習--制作選項卡

選項卡制作 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>.text_one {width: 11.4%;height: 200px…

海致科技實施實習生面試

一、面試內容 注&#xff1a;此次是電話面試 1.是XX先生嗎 2.你是有考慮轉實施的嗎&#xff1f; 3.請講一下你對項目部署實施的理解和掌握 4.用過數據庫&#xff0c;會編寫SQL語句嗎&#xff1f; 5.講一下SQL的常用關鍵字 6.了解SQL中的函數嗎&#xff1f;談談函數 7.多…

Hutool 獲取中文日期

在開發過程中&#xff0c;有時會需要獲取全中文格式的日期&#xff0c;比如&#xff1a;二〇二四年七月三日。 此時就需要將日期轉換成該格式&#xff0c;Hutool 封裝了該工具&#xff1a; /*** 格式化為中文日期格式&#xff0c;如果isUppercase為false&#xff0c;則返回類似…

身邊的故事(十三):阿文的故事:出現

如果他知道一件事情如果違背正常的市場規律就是騙局或者存在巨大的風險&#xff0c;比如市場正常投資回報率在5-6%已經算高回報&#xff0c;像股神巴菲特的投資回報率應該不會超過10%吧。那些說20-30%甚至更高回報率肯定是騙局。如果...哪有那么多如果&#xff0c;人生每一秒都…

前端面試題,說說iframe的優點和缺點 ?

iframe的優點&#xff1a; 內容隔離&#xff1a;iframe 可以將外部內容嵌入到頁面中&#xff0c;實現內容的隔離和獨立性&#xff0c;避免外部內容對頁面的影響。 模塊化&#xff1a;通過 iframe&#xff0c;可以將頁面拆分成多個模塊&#xff0c;每個模塊可以…