網站首頁 編程語言 正文
前言:
我們都是帶著問題學習,假設一個任務,也可以理解為一個問題,通過找解決方案來提升自己 c++ 的編程能力,嘗試這是否一條好的路線,希望找到這種學習方式有效
問題簡單描述一下,就是從以字符串,課程名稱組成的集合中將一些包含特定文字,將其從列表中刪除
Vector簡介
- Vector 是一個能夠存放任意類型的動態數組,有點類似數組,是一個連續地址空間,
Vector 與數組
- Vector 是支持動態空間大小調整
- 數組往往在定義需要指定固定大小
#include<vector>
要使用 vector 需要引入一下其頭文件
創建 vector 的各種方法
- 創建一個 T 類型的空 vector
- 創建時可以指定容量大小
- 創建時不但可以指定容量大小,還可以指定元素初始值
- 創建一個基于已有 vector 的拷貝
- 基于數組來創建 vector
vector<int> v1; vector<int> v2(5); vector<int> v3(5, 0); vector<int> copyOf(v3); int arr[] = { 1,2,3,5,7,9 }; vector<int> v5(arr, arr + 6);
v5.push_back(11);
向一個 vector 中添加元素
bool isEmpty = v1.empty();
訪問 vector 的元素
- 調用?
vector::at()
- 調用?
vector::operator[]
兩者的區別在于
- operator[] 提供類似數組的存取方式,但不做邊界是否越界檢查,訪問效率高
- at() 進行邊界檢查,訪問越界則拋出 exception 效率不容 operator[],這樣開銷比較大,因為我們用 c++ 主要還是要考慮到效率
vector<wstring> v; v.reserve(10); for (size_t i = 0; i < 3; i++) { wstringstream wss; wss << "[" << i << "]" << endl; v.push_back(wss.str()); } try { wstring wsz = v.at(5); } catch (const std::exception& ex) { cout << ex.what() << endl; }
刪除元素
- clear 清除整個 vector
- pop_back:彈出 vector 末尾元素
- erase: 刪除 vector 中某一位置的元素
使用 erase 來刪除某一個位置元素,可以指定 iterator 來刪除某一個元素,也可以通過條件函數找到 vector 中需要刪除的元素,這里?remove_if
?為例說明
vector<string> tuts; tuts.push_back("machine learning basic tutorial"); tuts.push_back("deep learning basic tutorial"); tuts.push_back("transformer tutorial"); for (int i = 0; i < tuts.size(); i++) { cout << tuts[i] << endl; }
首先我們需要集合來承載這些字符串,這里我選擇了?vector
?作為容器,這樣就得到了一個集合?tuts
vector<string> tuts; tuts.push_back( "machine learning basic tutorial" ); tuts.push_back("deep learning basic tutorial"); tuts.push_back("transformer tutorial"); for (int i = 0; i < tuts.size(); i++) { cout << tuts[i] << endl; string::size_type idx; idx = tuts[i].find("basic tutorial"); if (idx == string::npos) { cout << "Not Found" << endl; } else { cout << "Found" << endl; } }
這里定義這個函數 isContainsBasicTut ,這個代碼是不是讓大家聯想到 map,這個函數通常會接受一個數組元素做輸入,返回一個 bool 類型值,滿足一定條件返回 true
bool isContainsBasicTut(string tutName) { string::size_type idx; idx = tutName.find("basic tutorial"); if (idx == string::npos) { return false; } else { return true; } }
然后可以調用?tuts
?的?erase
?也就是?vector
?的刪除方法,這里?remove_if
?方法并不會實際移除序列中的元素,只是將符合條件元素移動到容器末尾并返回指向第一個移除元素的位置的迭代器,接下來 erase 對 vector 容器中根據?remove_if
?提供的信息來對元素進行清除。
vector<string> tuts; tuts.push_back( "machine learning basic tutorial" ); tuts.push_back("deep learning basic tutorial"); tuts.push_back("transformer tutorial"); tuts.erase( remove_if(tuts.begin(), tuts.end(), isContainsBasicTut), tuts.end()); for (int i = 0; i < tuts.size(); i++) { cout << tuts[i] << endl; }
接下來我們再通過一例子來看在實際開發中如何使用 if_remove
bool isOdd(int num) { return ((num % 2) == 1); } int main() { vector<int> nums{ 1, 2, 3, 10, 12, 15, 17, 20 }; remove_if(nums.begin(), nums.end(), isOdd); for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++) cout << *it << "\t"; return 0; }
首先還是定義
原文鏈接:https://juejin.cn/post/7105572360907915277
相關推薦
- 2022-03-17 詳解Golang函數式選項(Functional?Options)模式_Golang
- 2023-07-08 git代碼回滾到某個tag
- 2022-09-15 .Net站點設置多個路由對應同一個Action_實用技巧
- 2023-03-22 Python中數值比較的效率_python
- 2022-05-10 remote: error: GE007: Your push would publish a pr
- 2023-01-30 python中用shutil.move移動文件或目錄的方法實例_python
- 2021-12-09 帶你一文了解C#中的LINQ_C#教程
- 2022-03-29 在pyqt5中展示pyecharts生成的圖像問題_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支