真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

九、vector用法-創(chuàng)新互聯(lián)

目錄

為永寧等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及永寧網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都做網(wǎng)站、永寧網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

1.vector介紹

2.vector使用

2.1.vector的定義

示例:

2.2.vector的遍歷?

1、operator[ ]

2、迭代器

3、for?

2.3.vector的空間增長(zhǎng)問(wèn)題

1、size和capacity

2、max_size

3、reserve?

4、resize?

2.4、vector的增刪查改?

1、push_back和pop_back

2、insert和erase

3、find

4、sort(不是成員函數(shù))


1.vector介紹
1. vector 是表示 可變大小數(shù)組 的 序列容器 。 2. 就像數(shù)組一樣, vector 也采用的連續(xù)存儲(chǔ)空間來(lái)存儲(chǔ)元素。也就是意味著可以采用下標(biāo)對(duì) vector 的元素 進(jìn)行訪問(wèn),和數(shù)組一樣高效。 但是又不像數(shù)組,它的大小是可以動(dòng)態(tài)改變的,而且它的大小會(huì)被容器自動(dòng)處理。 3. 本質(zhì)講, vector 使用動(dòng)態(tài)分配數(shù)組來(lái)存儲(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)可能的增長(zhǎng),因?yàn)榇鎯?chǔ)空間比實(shí)際需要的存儲(chǔ)空間更大。 不同的庫(kù)采用不同的策略權(quán)衡空間的使用和重新分配。但是無(wú)論如何,重新分配都應(yīng)該是對(duì)數(shù)增長(zhǎng)的間隔大小,以至于在末尾插入一個(gè)元素的時(shí)候是在常數(shù)時(shí)間的復(fù)雜度完成的。 5. 因此, vector占用了更多的存儲(chǔ)空間,為了獲得管理存儲(chǔ)空間的能力,并且以一種有效的方式動(dòng)態(tài)增長(zhǎng)。 6. 與其它動(dòng)態(tài)序列容器相比( deque, list and forward_list) ,對(duì)于其它不在末尾的刪除和插入操作,效率更低。 比起list 和 forward_list統(tǒng)一的迭代器和引用更好。
2.vector使用 2.1.vector的定義
(constructor)構(gòu)造函數(shù)聲明接口說(shuō)明
1、vector();? ?(重點(diǎn))無(wú)參構(gòu)造

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

構(gòu)造并初始化n個(gè)val
3、vector (const vector& x);?(重點(diǎn))拷貝構(gòu)造
4、vector (InputIterator first, InputIterator last);使用迭代器進(jìn)行初始化構(gòu)造
示例:

1、vector()?無(wú)參構(gòu)造

int main()
{
    vectora;//存儲(chǔ)int類型數(shù)據(jù)
    vectorv3;//存儲(chǔ)string類型數(shù)據(jù)
}

2、vector(size_type n, const value_type& val = value_type())構(gòu)造并初始化n個(gè)val

vectorv1(10, 5);//用10個(gè)5來(lái)初始化v1

3、vector (const vector& x);?(重點(diǎn))

vectorv1(10, 5);//用10個(gè)5來(lái)初始化v1
vectorv2(v1);//用v1去拷貝構(gòu)造v2

4、vector (const vector& x);?(重點(diǎn))

vectorv1(10, 5);//用10個(gè)5來(lái)初始化v1
vectorv3(v1.begin(), v1.end());//使用迭代器拷貝構(gòu)造v2的數(shù)據(jù)
2.2.vector的遍歷?
接口名稱使用說(shuō)明
1、operator[ ]下標(biāo) + [ ]
2、迭代器begin + end 或 rbrgin + rend
3、范圍for底層還是借用迭代器實(shí)現(xiàn)
1、operator[ ]

operator[ ]就是對(duì)[ ]的重載,是我們可以像C語(yǔ)言那樣使用下標(biāo) + [ ]去訪問(wèn)元素。

void test()
{
     vectornum;
     num.push_back(1);
	 num.push_back(2);
	 num.push_back(3);
     for (size_t i = 0; i< num.size(); i++)
	 {
		num[i] += 1;
		cout<< num[i]<< " "; // 2 3 4 5
     }
}
2、迭代器

vector的迭代器和string的迭代器近乎一致,規(guī)則也都類似。

iterator的使用接口說(shuō)明
1、begin + end

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

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

2、rbegin + rend

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

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

1.正向迭代器

void test()
{
     vectornum;
     num.push_back(1);
	 num.push_back(2);
	 num.push_back(3);
     vector:: iterator it = num.begin();
     while (it != num.end())
     {
		*it *= 2;
		cout<< *it<< " "; // -1 -2 -3
		it++;
	 }
}

2.反向迭代器

void test()
{
	vectornum(10, 5);
    vectorreverse_iterator v = num.rbegin();
    while (rit != v.rend())
	{
		cout<< *rit<< " ";
		rit++;
	}
}
3、for?

范圍for的底層就是替換了迭代器,和string類類似。

?3、范圍for
void test()
{
	vectornum;
	num.push_back(1);
	num.push_back(2);
	num.push_back(3);
	//3、范圍for
	for (auto e : num)
	{
		cout<< e<< " "; //1 2 3 4
	}
2.3.vector的空間增長(zhǎng)問(wèn)題
容量空間接口說(shuō)明
1、size獲取數(shù)據(jù)個(gè)數(shù)
2、capacity獲取容量大小
3、max_size判斷元素大個(gè)數(shù)
4、resize改變vector中的size
5、reserve改變vector的capacity
1、size和capacity

作用:

vector的size是用來(lái)獲取有效數(shù)據(jù)個(gè)數(shù),而capacity就是獲取容量大?。?/p>

void test()
{
	vectorv(7, 5);
	cout<< v.size()<< endl;//7
	cout<< v.capacity()<< endl;//7
}
2、max_size

作用:

是返回vector容器可以容納的大元素?cái)?shù),用類型的大值除以sizeof(類型)即max_size。?

void test()
{
	vectorv1;
	cout<< v1.max_size()<< endl;//1073741823
	vectorv2;
	cout<< v2.max_size()<< endl;//2147483647
}
3、reserve?

作用:

是請(qǐng)求更改容量capacity。

  1. 如果?n大于當(dāng)前容量,則該函數(shù)會(huì)導(dǎo)致容器重新分配其存儲(chǔ),將其容量增加到?n(或更大)。
  2. 在所有其他情況下,函數(shù)調(diào)用不會(huì)導(dǎo)致重新分配,且容量不會(huì)受影響。
    void test()
    {
    	vectorv(10, 5);
    	cout<< v.capacity()<< endl;//10
    	//如果n >當(dāng)前容量大小,更新容量至n
    	v.reserve(100);
    	cout<< v.capacity()<< endl;//100
    	//如果n< 當(dāng)前容量大小,不做出任何改動(dòng)
    	v.reserve(20);
    	cout<< v.capacity()<< endl;//100
    }
4、resize?

resize在空間的同時(shí)也進(jìn)行了初始化。

如果 n 小于當(dāng)前容器大小,則內(nèi)容將減少到其前 n 個(gè)元素,刪除超出(并銷毀)的元素。
如果 n 大于當(dāng)前容器大小 ,則通過(guò)在末尾插入所需數(shù)量的元素以達(dá)到 n 的大小來(lái)擴(kuò)展內(nèi)容。如果指定了 val,則新元素將初始化為 val 的副本,否則,它們將進(jìn)行值初始化。

void test()
{
	vectorv(10, 5);
	cout<< v.size()<< endl;//10
	cout<< v.capacity()<< endl;//10
	//如果n的大小 >size和capacity,更新到n。超出的部分用1初始化
	v.resize(100, 1);
	cout<< v.size()<< endl;//100
	cout<< v.capacity()<< endl;//100
	//如果n的大小< size,更新size到n,容量capacity不變
	v.resize(50);
	cout<< v.size()<< endl;//50
	cout<< v.capacity()<< endl;//100
	//如果n的大小 >size,且< capacity,更新size到n,容量capacity不變
	v.resize(70);
	cout<< v.size()<< endl;//50
	cout<< v.capacity()<< endl;//100
}

2.4、vector的增刪查改?
vector增刪查改接口說(shuō)明
1、push_back尾插
2、pop_back尾刪
3、insert在下標(biāo)為pos的前面插入val
4、erase刪除下標(biāo)為pos的值
5、find查找(注意這個(gè)是算法模塊實(shí)現(xiàn),不是vector的成員接口)
6、sort排序(注意這里也不是vector的函數(shù)接口,只是用于排序)

1、push_back和pop_back
void test()
{
	vectorv;
	v.push_back(1);
	v.push_back(10);
	v.pop_back();
	v.pop_back();
}
2、insert和erase

insert就是在下標(biāo)為pos的前面插入val,erase就是刪除下標(biāo)為pos的值。

void test9()
{
	vectorv;
	v.push_back(1);
	v.push_back(10);
//insert
	v.insert(v.begin(), 0); //在下標(biāo)為0的位置插入0
	v.insert(v.begin(), 2, -1);//在下標(biāo)為0的位置往后插入兩個(gè)-1
	for (auto e : v)
		cout<< e<< " "; //-1 -1 0 1 10
	cout<< endl;
	v.insert(v.begin() + 3, 2);//在下標(biāo)為3的位置插入2
	for (auto e : v)
		cout<< e<< " "; //-1 -1 0 2 1 10
	cout<< endl;
//erase
	v.erase(v.begin()); //頭刪
	for (auto e : v)
		cout<< e<< " "; //-1 0 2 1 10
	cout<< endl;
	v.erase(v.begin() + 3); //刪除下標(biāo)為3的值
	for (auto e : v)
		cout<< e<< " "; //-1 0 2 10
	cout<< endl;
	//刪除在該迭代器區(qū)間內(nèi)的元素(左閉右開(kāi))
	v.erase(v.begin(), v.begin() + 3);//刪除下標(biāo)[0, 3)左閉右開(kāi)的值
	for (auto e : v)
		cout<< e<< " ";//10
}

3、find

這里的find并不是vector的成員函數(shù),這個(gè)是算法模塊實(shí)現(xiàn)。其本質(zhì)就是在一段左閉右開(kāi)的迭代器區(qū)間去尋找一個(gè)值。找到了就返回它的迭代器,找不到就返回它的開(kāi)區(qū)間那個(gè)迭代器。

void test()
{
	vectorv;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	//vector::iterator pos = find(v.begin(), v.end(), 3);
	auto pos = find(v.begin(), v.end(), 3);//調(diào)用find在左閉右開(kāi)的區(qū)間內(nèi)尋找val
	if (pos != v.end())
	{
		cout<< "找到了"<< endl;
		v.erase(pos);//找到后,把該值刪掉
	}
	else
	{
		cout<< "沒(méi)有找到"<< endl;
	}
	for (auto e : v)
		cout<< e<< " "; //1 2 4
}

4、sort(不是成員函數(shù))
void test()
{
	vectorv;
	v.push_back(1);
	v.push_back(-23);
	v.push_back(30);
	v.push_back(9);
	v.push_back(0);
	v.push_back(-90);
//默認(rèn)sort是升序
	sort(v.begin(), v.end());
	for (auto e : v)
		cout<< e<< " "; //-90 -23 0 1 9 30
	cout<< endl;
//要排降序,就要用到仿函數(shù),具體是啥后續(xù)詳談
	sort(v.begin(), v.end(), greater());
	for (auto e : v)
		cout<< e<< " "; //30 9 1 0 -23 -90
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前標(biāo)題:九、vector用法-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://weahome.cn/article/coigoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部