国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】vector 基本使用(詳解)

這篇具有很好參考價(jià)值的文章主要介紹了【C++】vector 基本使用(詳解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一,vector 的介紹

二,vector 的定義

1,vector()

2,vector(size_type n, const value_type& val = value_type())

3,vector (const vector& x)

4,vector (InputIterator first, InputIterator last);

三,vector iterator 的使用

1,begin + end

2,rbegin + rend?

四,vector 空間增長問題

1,size

2,capacity

3,empty

4,reserve

5,resize

五,vector 增刪查改

1,push_back

2,pop_back?

3,find

4,insert

5,erase

6,swap

7,operator[]


【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

一,vector 的介紹

1,vector 是表示可變大小數(shù)組的序列容器。

2,就像數(shù)組一樣,vector 也采用的連續(xù)存儲(chǔ)空間來存儲(chǔ)元素。也就是意味著可以采用下標(biāo)對(duì)vector 的元素 進(jìn)行訪問,和數(shù)組一樣高效。但是又不像數(shù)組,它的大小是可以動(dòng)態(tài)改變的,而且它的大小會(huì)被容器自動(dòng)處理。

3,本質(zhì)講,vector 使用動(dòng)態(tài)分配數(shù)組來存儲(chǔ)它的元素。當(dāng)新元素插入時(shí)候,這個(gè)數(shù)組需要被重新分配大小為了增加存儲(chǔ)空間。其做法是,分配一個(gè)新的數(shù)組,然后將全部元素移到這個(gè)數(shù)組。就時(shí)間而言,這是一個(gè)相對(duì)代價(jià)高的任務(wù),因?yàn)槊慨?dāng)一個(gè)新的元素加入到容器的時(shí)候,vector 并不會(huì)每次都重新分配大小。

4,vector 分配空間策略:vector 會(huì)分配一些額外的空間以適應(yīng)可能的增長,因?yàn)榇鎯?chǔ)空間比實(shí)際需要的存儲(chǔ)空間更大。不同的庫采用不同的策略權(quán)衡空間的使用和重新分配。但是無論如何,重新分配都應(yīng)該是對(duì)數(shù)增長的間隔大小,以至于在末尾插入一個(gè)元素的時(shí)候是在常數(shù)時(shí)間的復(fù)雜度完成的。

5,因此,vector 占用了更多的存儲(chǔ)空間,為了獲得管理存儲(chǔ)空間的能力,并且以一種有效的方式動(dòng)態(tài)增長。

6,與其它動(dòng)態(tài)序列容器相比(deque, list and forward_list), vector 在訪問元素的時(shí)候更加高效,在末尾添加和刪除元素相對(duì)高效。對(duì)于其它不在末尾的刪除和插入操作,效率更低。比起listforward_list 統(tǒng)一的迭代器和引用更好。

二,vector 的定義

1,vector()

無參構(gòu)造

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1;
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

這里我們定義一個(gè) vector 類,它里面的各種數(shù)據(jù)都是初始化了的,不是空就是0;

2,vector(size_type n, const value_type& val = value_type())

構(gòu)造并初始化 n 個(gè) val

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	for (int i = 0; i < 5; i++)
	{
		cout << v1[i]<<" ";
	}

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

直接自己定義初始化成 n 個(gè) val;

3,vector (const vector& x)

拷貝構(gòu)造

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	vector<int> v2(v1);
	for (int i = 0; i < 5; i++)
	{
		cout << v2[i]<<" ";
	}

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

拷貝構(gòu)造嘛,都老朋友了;

4,vector (InputIterator first, InputIterator last);

使用迭代器進(jìn)行初始化構(gòu)造

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5,6);
	for (int i = 0; i < 5; i++)
	{
		v1[i] = i;
	}

	vector<int> v2(v1.begin()+1, v1.end()-1);
	for (int i = 0; i < 3; i++)
	{
		cout << v2[i] << " ";
	}

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

迭代器進(jìn)行初始化構(gòu)造,就是選取一段范圍進(jìn)行拷貝;

三,vector iterator 的使用

1,begin + end

獲取第一個(gè)數(shù)據(jù)位置的 iterator/const_iterator, 獲取最后一個(gè)數(shù)據(jù)的下一個(gè)位置的iterator/const_iterator

2,rbegin + rend?

獲取最后一個(gè)數(shù)據(jù)位置的 reverse_iterator,獲取第一個(gè)數(shù)據(jù)前一個(gè)位置的 reverse_iterator

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

諸位愛卿,我相信這張圖對(duì)汝等足矣!

四,vector 空間增長問題

1,size

獲取數(shù)據(jù)個(gè)數(shù)

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.size();

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

獲取有效數(shù)據(jù)個(gè)數(shù),不等同于容量,只是數(shù)據(jù)個(gè)數(shù);

2,capacity

獲取容量大小

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.capacity();

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

查看空間容量的,不等同于數(shù)據(jù)個(gè)數(shù);

3,empty

判斷是否為空,為空返回真,不為空返回 0;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	vector<int> v2;
	cout << v1.empty()<<" "<<v2.empty();

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

4,reserve

改變 vector 的 capacity

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.capacity() << endl;

	v1.reserve(50);
	cout << v1.capacity() << endl;

	v1.reserve(20);
	cout << v1.capacity() << endl;

	v1.reserve(3);
	cout << v1.capacity() << endl;

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

兄弟們自己找找規(guī)律;?

5,resize

改變 vector 的 size

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	cout << v1.size() << " " << v1.capacity() << endl;

	v1.resize(20);
	cout << v1.size() << " " << v1.capacity() << endl;

	v1.resize(10);
	cout << v1.size() << " " << v1.capacity() << endl;

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

size()的值與 capacity 的值息息相關(guān)的,當(dāng) size()大于 capacity 時(shí),capacity 會(huì)增大擴(kuò)容;

五,vector 增刪查改

1,push_back

尾插

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	v1.push_back(7);
	v1.push_back(8);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i]<<" ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

2,pop_back?

尾刪

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1(5, 6);
	v1.pop_back();
	v1.pop_back();
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i]<<" ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

3,find

查找。(注意這個(gè)是算法模塊實(shí)現(xiàn),不是 vector 的成員接口)

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;

	pos = find(v1.begin(), v1.end(), 5);
	cout << *pos;
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

在一個(gè)特點(diǎn)的范圍里尋找一個(gè)數(shù),然后返回指向這個(gè)數(shù)的迭代器;

4,insert

在 position 之前插入 val

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;
	v1.insert(pos, 66);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

在指定位置前插入特定的數(shù);

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;

	v1.insert(pos, 3, 77);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

在指定位置前插入指定數(shù)量的數(shù);

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(),v1.end(), 3);
	cout << *pos << endl;

	v1.insert(pos, v1.begin(), v1.begin() + 2);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}

	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

在指定位置前插入一段區(qū)間;

5,erase

刪除 position 位置的數(shù)據(jù)

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };
	auto pos = find(v1.begin(), v1.end(), 3);
	cout << *pos << endl;
	
	v1.erase(pos);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

刪除某個(gè)指定位置的數(shù)據(jù);

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 1,2,3,4,5 };

	v1.erase(v1.begin(),v1.end()-1);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

刪除指定一段區(qū)間的數(shù)據(jù);

6,swap

交換兩個(gè) vector 的數(shù)據(jù)空間

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 0,1,2,3,4 };
	vector<int> v2{ 5,6,7,8,9 };

	v1.swap(v2);
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v2[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

直接交換兩邊的數(shù)據(jù);

7,operator[]

像數(shù)組一樣訪問

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

這個(gè)我們已經(jīng)很熟悉了;

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	vector<int> v1{ 0,1,2,3,4 };
	for (int i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	return 0;
}

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深

【C++】vector 基本使用(詳解),C++,c++,開發(fā)語言,動(dòng)態(tài)規(guī)劃,迭代加深文章來源地址http://www.zghlxwxcb.cn/news/detail-768307.html

到了這里,關(guān)于【C++】vector 基本使用(詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++每日一練:打家劫室(詳解動(dòng)態(tài)規(guī)劃法)

    C++每日一練:打家劫室(詳解動(dòng)態(tài)規(guī)劃法)

    這題目出得很有意思哈,打劫也是很有技術(shù)含量滴!不會(huì)點(diǎn)算法打劫這么粗暴的工作都干不好。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 題目名稱: 打家劫舍 題目描述: 一個(gè)小偷,計(jì)劃偷竊沿街的房屋。每間房內(nèi)都藏有一定的現(xiàn)金,影響你偷竊的唯一制約因素

    2024年02月02日
    瀏覽(27)
  • C++算法之旅、06 基礎(chǔ)篇 | 第四章 動(dòng)態(tài)規(guī)劃 詳解

    狀態(tài)表示 集合 滿足一定條件的所有方案 屬性 集合(所有方案)的某種屬性(Max、Min、Count等) 狀態(tài)計(jì)算(集合劃分) 如何將當(dāng)前集合劃分成多個(gè)子集合 狀態(tài)計(jì)算相當(dāng)于集合的劃分 :把當(dāng)前集合劃分成若干個(gè)子集,使得每個(gè)子集的狀態(tài)可以先算出來,從而推導(dǎo)當(dāng)前集合狀態(tài)

    2024年02月09日
    瀏覽(30)
  • C++中的vector使用詳解及重要部分底層實(shí)現(xiàn)

    C++中的vector使用詳解及重要部分底層實(shí)現(xiàn)

    ?? ? ? 本篇文章會(huì)對(duì)vector的語法使用進(jìn)行詳解。同時(shí),還會(huì)對(duì)重要難點(diǎn)部分的底層實(shí)現(xiàn)進(jìn)行講解。其中有vector的 迭代器失效 和 深拷貝 問題。希望本篇文章的內(nèi)容會(huì)對(duì)你有所幫助。 目錄 一、vector 簡單概述 1、1 C語言中數(shù)組的不便 1、2 C++中的動(dòng)態(tài)數(shù)組容器vector? 二、vector的

    2024年02月12日
    瀏覽(24)
  • 【C++】中的vector使用詳解及重要部分底層實(shí)現(xiàn)

    【C++】中的vector使用詳解及重要部分底層實(shí)現(xiàn)

    ?? ? ? 本篇文章會(huì)對(duì)vector的語法使用進(jìn)行詳解。同時(shí),還會(huì)對(duì)重要難點(diǎn)部分的底層實(shí)現(xiàn)進(jìn)行講解。其中有vector的 迭代器失效 和 深拷貝 問題。希望本篇文章的內(nèi)容會(huì)對(duì)你有所幫助。 目錄 一、vector 簡單概述 1、1 C語言中數(shù)組的不便 1、2 C++中的動(dòng)態(tài)數(shù)組容器vector? 二、vector的

    2024年02月15日
    瀏覽(21)
  • 【C++初階】C++STL詳解(三)—— vector的介紹及使用

    【C++初階】C++STL詳解(三)—— vector的介紹及使用

    ? ???個(gè)人主頁:@Sherry的成長之路 ??學(xué)習(xí)社區(qū):Sherry的成長之路(個(gè)人社區(qū)) ??專欄鏈接:C++學(xué)習(xí) ?? 長路漫漫浩浩,萬事皆有期待 上一篇博客:【C++】string類常見題目詳解(二) —— 把字符串轉(zhuǎn)換成整數(shù)、反轉(zhuǎn)字符串、反轉(zhuǎn)字符串 II、反轉(zhuǎn)字符串中的單詞 III、字符

    2024年02月11日
    瀏覽(27)
  • C++ vector基本操作

    C++ vector基本操作

    目錄 一、介紹 二、定義 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 總結(jié)(擴(kuò)容機(jī)制) 五、增刪查改 1、push_back pop_back 2、find 3、insert 4、erase 5、clear 6、swap 7、operator[] vector的文檔介紹 vector是表示可變大小數(shù)組的序列容器。 就像數(shù)組一樣,vector也采用

    2024年02月04日
    瀏覽(17)
  • 【C++】vector基本接口介紹

    【C++】vector基本接口介紹

    vector接口目錄: 一、vector的初步介紹 1.1vector和string的聯(lián)系與不同 1.2 vector的源碼參數(shù) 二、vector的四種構(gòu)造(缺省+填充元素+迭代器+拷貝構(gòu)造) 三、vecto的擴(kuò)容操作與機(jī)制 3.1resize(老朋友了,不會(huì)就去看string ) reserve ?3.2 reserve的擴(kuò)容機(jī)制 3.3 vector和malloc分別實(shí)現(xiàn)動(dòng)態(tài)開辟的二

    2024年02月08日
    瀏覽(34)
  • 【C++】STL---vector基本用法介紹

    【C++】STL---vector基本用法介紹

    個(gè)人主頁:平行線也會(huì)相交?? 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng) 收錄于專欄【C++之路】?? 本專欄旨在記錄C++的學(xué)習(xí)路線,望對(duì)大家有所幫助??? 希望我們一起努力、成長,共同進(jìn)步。?? vector 是 C++STL 中的一種 動(dòng)態(tài)數(shù)組容器 ,用于存儲(chǔ)和

    2024年02月16日
    瀏覽(18)
  • 【C++】容器篇(一)—— vector 的基本概述以及模擬實(shí)現(xiàn)

    【C++】容器篇(一)—— vector 的基本概述以及模擬實(shí)現(xiàn)

    前言: 在之前,我們已經(jīng)對(duì) string類進(jìn)行了基本的概述,并且手動(dòng)的實(shí)現(xiàn)了string類中常用的接口函數(shù)。本期,我將帶領(lǐng)大家學(xué)習(xí)的是STL庫中的一個(gè)容器 -- vector 的學(xué)習(xí)。相比于之前的string類,本期的 vector 相對(duì)來說實(shí)現(xiàn)起來略微難一點(diǎn),難點(diǎn)就在于要考慮關(guān)于 “ 迭代器失效 ”

    2024年02月07日
    瀏覽(22)
  • 探索C++中的動(dòng)態(tài)數(shù)組:實(shí)現(xiàn)自己的Vector容器

    探索C++中的動(dòng)態(tài)數(shù)組:實(shí)現(xiàn)自己的Vector容器

    ??個(gè)人名片 : ??作者簡介:一名樂于分享在學(xué)習(xí)道路上收獲的大二在校生 ??個(gè)人主頁??:GOTXX ??個(gè)人WeChat:ILXOXVJE ??本文由GOTXX原創(chuàng),首發(fā)CSDN?????? ??系列專欄:零基礎(chǔ)學(xué)習(xí)C語言----- 數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之路----C++的學(xué)習(xí)之路 ??每日一句:如果沒有特別幸運(yùn),那就請(qǐng)?zhí)?/p>

    2024年03月16日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包