【C++】vector:容器的別樣風采

目錄

vector:

vector實例化:

vector構造函數:

vector對象尾插:v1.push_back()

vector迭代器:

vector實例化string類型的對象

vector接口:

begin()+end()//rbegin()+rend()

resize():


vector:

vector是序列容器,表示大小可以變化的數組

其實就是之前學的順序表

vector實例化:

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{//vector<數據類型>對象名(...)vector<int>v1;vector<int>v2(10,1);//用10個1來初始化v2vector<char>vector<double>vector<string>return 0;}

vector構造函數:

//n個val構造
vector<int>arr(10, 1);
for (auto x:arr)
{cout << x << " ";
}
//拷貝構造
vector<int>arr(10, 1);
vector<int>arr1(arr);
for (auto x : arr)
{cout << x << " ";
}//在c++11規則下,vector還支持類型數組一樣的初始化
vector<int>v1={1,2,3,4,5};//這里存在隱式類型轉換
//initializer list (6)	
vector (initializer_list<value_type> il,//c++11下,新增的構造函數const allocator_type& alloc = allocator_type());
//它支持用一個花括號來初始化一個對象,這個對象的類型就是'initializer_list'
auto i1={1,2,3,4};//i1的類型是initializer_list,initializer_list可以理解為是一個容器,它支持用一個{}來初始化這個容器,這個容器只支持遍歷,不支持插入數據與刪除數據
//或者記憶為:vector不能實現參數多變,只能使用initializer_list對象****************************************************************************
vector<int>v1={1,2,3,4,5};//這個存在一個隱式類型轉換,原本是構造+拷貝構造,只不過被編譯器優化,變成了直接構造
vector<int>v2({1,2,3,4,5});//這里直接將參數傳給initializer_list構造函數

vector對象尾插:v1.push_back()

  vector<int>v1;v1.push_back(1);v1.push_back(1);v1.push_back(1);v1.push_back(1);v1.push_back(1);for (int i=0;i<v1.size();i++){cout << v1[i] << " ";}
//assign
vector<int>v1 = {1,2,3,4,5};
v1.assign({10,20,30});//為v1分配一個新空間, 并把10,20,30賦值給v1,并修改v1的size
for (auto x : i1)
{cout << x << " ";
}
cout << endl;//insert
//1:
v1.insert(v1.begin(),10);//在當前位置插入一個值,不能輸坐標,只能用迭代器
for (auto e : v1)
{cout << e << " ";
}
cout << endl;
//2:
v1.insert(v1.begin(), 10,0);//在當前位置,插入10個0
for (auto e : v1)
{cout << e << " ";
}
cout << endl;
//3:
v1.insert(v1.begin(), v2.begin(), v2.end());//在當前位置,插入這一迭代器區間的值
for (auto e : v1)
{cout << e << " ";
}
cout << endl;//erase
v1.erase(v1.begin());//刪除迭代器位置的值
for (auto e : v1)
{cout << e << " ";
}
cout << endl;v1.erase(v1.begin(),v1.end());//刪除某一迭代器區間的值
for (auto e : v1)
{cout << e << " ";
}
cout << endl;//shrink_to_fit
vector<int>v1(10);
cout << v1.size() << endl;
cout << v1.capacity() << endl;v1.resize(5);
cout << v1.size() << endl;
cout << v1.capacity() << endl;v1.shrink_to_fit();//將空間縮容到與當前數據個數相同的大小
cout << v1.size() << endl;
cout << v1.capacity() << endl//data
vector<int>v1 = { 1,2,3,4,5,6,7 };
int* p = v1.data();//返回指向這一數組的指針for (int i=0;i<v1.size();i++)
{cout << (*p) << endl;p++;
}//emplace
vector<int>v1 = { 1,2,3,4,5,6,7 };
auto it = v1.begin();
v1.emplace(it,10);//在當前迭代器的位置插入數據
for (auto e : v1)
{cout << e << " ";
}//emplace
vector<int>v1 = { 1,2,3,4,5,6,7 };
v1.emplace_back(100);//在容器末尾插入數據
for (auto e : v1)
{cout << e << " ";
}
vector<int>v1 = {1,2,3,4,5,6,7};
v1[9]++;//[]越界直接斷言報錯vector<int>v1 = {1,2,3,4,5,6,7};
cout << v1.at(9) << endl;//拋異常

vector迭代器:

  vector<int>v1;v1.push_back(1);v1.push_back(1);v1.push_back(1);v1.push_back(1);v1.push_back(1);vector<int>::iterator it1 = v1.begin();//it1為迭代器名while (it1!=v1.end()){cout << *it1 << " ";++it1;}
*************************************
//迭代器失效
void insert(iterator pos, const T& x)
{assert(pos>=_start&&pos<=_finish);if (_finish==_endofstorage){size_t len = pos - _start;//迭代器失效->因為一些原因,迭代器不可用reserve(capacity()==0?4:capacity()*2);pos = _start + len;//雖然更新了pos,但是對形參的修改不會影響實參}iterator i = _finish - 1;while (i>=pos){*(i + 1) = *i;--i;}*pos = x;++_finish;
}if (it!=v1.end())
{it = v1.insert(it, 10 * x);cout << *it << endl;//迭代器失效
}
//it做為實參,將值傳給形參pos,當不需擴容時,不會存在迭代器失效的問題
//若需要擴容,雖然我們對pos進行了更新,但是對作為形參的pos進行修改不會影響到實參it//迭代器失效的兩種原因://1.擴容引起的野指針失效//2.刪除數據,迭代器已經不是指向之前的位置了,這就導致可能會造成邏輯錯誤

vector實例化string類型的對象

vector<string>vstr;
string s1 = "張三";
vstr.push_back(s1);
vstr.push_back("李四");//單參數構造函數支持隱式類型轉換vector<string>vstr;
string s1 = "張三";vstr.push_back(s1);
vstr.push_back("李四");for (const auto& e:vstr)//auto&是為了減少拷貝,const是為了防止數據被修改
{//e[0]++;cout << e << " ";
}vstr[0] += 'x';//vstr[0]表示訪問第一個string類型的值,就是張三,+='x'就表示在張三后面加上一個'x'vstr[0] +="hello";//為什么支持+=?因為實例化的是string類型,這里調用的實際上是string類型的+=vstr[0][1]++;vstr[0][1]++;vstr[0][1]++;vstr[1][1]++;vstr[1][1]++;vstr[1][1]++;for (const auto& x:vstr){cout << x;}

vector接口:

begin()+end()//rbegin()+rend()

//與string類中的接口類似
vector<int>arr(10,1);
vector<int>arr1(arr.begin(), arr.end());//迭代器初始化構造
for (auto x:arr1)
{cout << x;
}

都與string類中的接口用法一樣。

resize():

改變的是對象中有效字符的個數,當改變的值大于當前空間值時,會增容。

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

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

相關文章

大語言模型 15 - Manus 超強智能體 開源版本 OpenManus 案例與原理深入解析

寫在前面 Manus 是由中國初創公司 Monica.im 于 2025 年 3 月推出的全球首款通用型 AI 智能體&#xff08;AI Agent&#xff09;&#xff0c;旨在實現“知行合一”&#xff0c;即不僅具備強大的語言理解和推理能力&#xff0c;還能自主執行復雜任務&#xff0c;直接交付完整成…

【node.js】安裝與配置

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;node.js 文章目錄 1. Node.js簡介1.1 Node.js的特點1.2 Node.js架構 2. Node.js安裝2.1 下載和安裝方法2.1.1 Windows安裝2.1.2 macOS安裝2.1.3 Linux安裝 2.2 使用NVM安裝和管理Node.js版本2.2.1 安裝NVM2.2.2 使用NVM管理Node…

Neo4j(一) - Neo4j安裝教程(Windows)

文章目錄 前言一、JDK與Neo4j版本對應關系二、JDK11安裝及配置1. JDK11下載2. 解壓3. 配置環境變量3.1 打開系統屬性設置3.2 新建系統環境變量3.3 編輯 PATH 環境變量3.4 驗證環境變量是否配置成功 三、Neo4j安裝&#xff08;Windows&#xff09;1. 下載并解壓Neo4j安裝包1.1 下…

深信服golang面經

for range 中賦值的變量&#xff0c;這個變量指向的是真實的地址嗎&#xff0c;還是臨時變量 不是真實地址&#xff0c;是臨時變量 package mainimport "fmt"func main() {slice : []int{4, 2, 3}for _, v : range slice {fmt.Println(v, &v) // 這里的 v 是臨…

PLC雙人舞:profinet轉ethernet ip網關奏響施耐德與AB的協奏曲

PLC雙人舞&#xff1a;ethernet ip轉profinet網關奏響施耐德與AB的協奏曲 案例分析&#xff1a;施耐德PLC與AB PLC的互聯互通 在現代工業自動化中&#xff0c;設備之間的互聯互通至關重要。本案例旨在展示如何通過北京倍訊科技的EtherNet/IP轉Modbus網關&#xff0c;將施耐德P…

鏈接家里電腦

要在外網訪問家里的電腦&#xff08;或NAS&#xff09;&#xff0c;主要有 5種主流方法&#xff0c;各有優缺點&#xff0c;適用于不同需求。以下是詳細方案和操作指南&#xff1a; 一、方案對比速查表 方法適用場景速度安全性難度是否需要公網IP遠程桌面&#xff08;RDP&…

VS Code開源AI編輯器:一場編程革命的新起點

在2025年5月19日&#xff0c;微軟發布了一則激動人心的消息——VS Code將開源其AI編輯器組件&#xff0c;特別是GitHub Copilot Chat擴展。正如微軟官方博客所宣告的&#xff1a;“我們相信代碼編輯器的未來應該是開放的&#xff0c;并由AI驅動。” 為什么現在開源&#xff1f…

51c嵌入式※~合集7~Linux

我自己的原文哦~ https://blog.51cto.com/whaosoft/13926843 一、u-boot和bootloader~區別 Bootloader 比Bootloader從字面上來看就是啟動加載的意思。用過電腦的都知道&#xff0c;windows開機時會首先加載bios&#xff0c;然后是系統內核&#xff0c;最后啟動完畢。那…

深度學習實戰 04:卷積神經網絡之 VGG16 復現三(訓練)

在后續的系列文章中&#xff0c;我們將逐步深入探討 VGG16 相關的核心內容&#xff0c;具體涵蓋以下幾個方面&#xff1a; 卷積原理篇&#xff1a;詳細剖析 VGG 的 “堆疊小卷積核” 設計理念&#xff0c;深入解讀為何 332 卷積操作等效于 55 卷積&#xff0c;以及 333 卷積操作…

Ubuntu 20.04之Docker安裝ES7.17.14和Kibana7.17.14

你需要已經安裝如下運行環境: Ubuntu 20.04 docker 28 docker-compose 1.25 一、手動拉取鏡像 docker pull docker.elastic.co/kibana/kibana:7.17.14docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.14 或者手動導入鏡像 docker load -i es7.17.14.ta…

實時技術方案對比:SSE vs WebSocket vs Long Polling

早期網站僅展示靜態內容,而如今我們更期望:實時更新、即時聊天、通知推送和動態儀表盤。 那么要如何實現實時的用戶體驗呢?三大經典技術各顯神通: SSE(Server-Sent Events):輕量級單向數據流WebSocket:雙向全雙工通信Long Polling(長輪詢):傳統過渡方案假設目前有三…

測試開發面試題:Python高級特性通俗講解與實戰解析

前言&#xff1a;為什么測試工程師必須掌握Python高級特性&#xff1f; 通俗比喻&#xff1a; 基礎語法就像“錘子”&#xff0c;能敲釘子&#xff1b;高級特性就像“瑞士軍刀”&#xff0c;能應對復雜場景&#xff08;如自動化框架、高并發測試&#xff09;。面試官考察點&a…

C語言-9.指針

9.1指針 9.1-1取地址運算:&運算符取得變量的地址 運算符& scanf(“%d”,&i);里的&獲取變量的地址,它們操作數必須是變量int i;printf(“%x”,&i);地址的大小是否與int相同取決于編譯器int i;printf(“%p”,&i); &不能取的地址不能對沒有地址的…

【C++】Vcpkg 介紹及其常見命令

Vcpkg 簡介 Vcpkg 是微軟開發的一個跨平臺的 C/C 依賴管理工具&#xff0c;用于簡化第三方庫的獲取、構建和管理過程。 主要特點 跨平臺支持&#xff1a;支持 Windows、Linux 和 macOS開源免費&#xff1a;MIT 許可證大型庫集合&#xff1a;包含超過 2000 個開源庫簡化集成&…

Unity3D 動畫文件優化總結

前言 在Unity3D中&#xff0c;動畫文件的壓縮和優化是提升性能的重要環節&#xff0c;尤其在移動端或復雜場景中。以下是針對Animation Clip和Animator Controller的優化方法總結&#xff1a; 對惹&#xff0c;這里有一個游戲開發交流小組&#xff0c;希望大家可以點擊進來一…

前端工程的相關管理 git、branch、build

環境配置 標準環境打包 測試版&#xff1a;npm run build-test 預生產&#xff1a;npm run build-preview 正式版&#xff1a;npm run build 建議本地建里一個 .env.development.local 方便和后端聯調時修改配置相關信息。 和 src 同級有一下區分環境的文件&#xff1a; .env.d…

VAPO:視覺-語言對齊預訓練(對象級語義)詳解

簡介 多模態預訓練模型(Vision-Language Pre-training, VLP)近年來取得了飛躍發展。在視覺-語言模型中,模型需要同時理解圖像和文本,這要求模型學習二者之間的語義對應關系。早期方法如 VisualBERT、LXMERT 等往往使用預先提取的圖像區域特征和文本詞嵌入拼接輸入,通過 T…

docker運行Redis

創建目錄 mkdir -p /home/jie/docker/redis/{conf,data,logs}添加權限 chmod -R 777 /home/jie/docker/redis創建配置文件 cat > /home/jie/docker/redis/conf/redis.conf << EOF # 基本配置 bind 0.0.0.0 protected-mode yes port 6379# 安全配置 密碼是root require…

初識 java

目錄 前言 一、jdk&#xff0c;JRE和JVM之間的關系 二、JVM的內存劃分 前言 初步了解 jdk&#xff0c;JRE&#xff0c;JVM 之間的關系&#xff0c;JVM 的內存劃分。 一、jdk&#xff0c;JRE和JVM之間的關系 jdk 是 java 開發工具集&#xff0c;包含JRE&#xff1b; JRE 是…

關于百度地圖JSAPI自定義標注的圖標顯示不完整的問題(其實只是因為圖片尺寸問題)

下載了幾個阿里矢量圖標庫里的圖標作為百度地圖的自定義圖標&#xff0c;結果百度地圖顯示的圖標一直不完整。下載的PNG圖標已經被正常引入到前端代碼&#xff0c;anchor也設置為了圖標底部中心&#xff0c;結果還是顯示不完整。 if (iconUrl) {const icon new mapClass.Icon(…