欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ STL中vector容器的使用

 更新時(shí)間:2022年03月11日 09:56:54   作者:code-016  
這篇文章主要為大家詳細(xì)介紹了C++ vector容器的使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

一、vector

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

(1)區(qū)分size()和capacity()

  • size():返回容納的元素個(gè)數(shù)
  • capacity():返回當(dāng)前分配存儲(chǔ)的容量

(2)迭代器失效

在這里插入圖片描述

(3)區(qū)分const_iterator和const iterator

  • const_iterator:常性迭代器,指向的對(duì)象的屬性為常性;
  • const iterator:常性的普通迭代器,迭代器自身屬性為常性;

(4)區(qū)分reserve()和resize()

reserve():預(yù)留存儲(chǔ)空間,只改變capacity

增加 vector 的容量到大于或等于 new_cap 的值。若 new_cap 大于當(dāng)前的 capacity() ,則分配新存儲(chǔ),否則該方法不做任何事。reserve() 不更改 vector 的 size 。

若 new_cap 大于 capacity() ,則所有迭代器,包含尾后迭代器和所有到元素的引用都被非法化。否則,沒有迭代器或引用被非法化。

#include <iostream>
#include <vector>
using namespace std;
class Value
{
public:
	Value()
	{
		cout << "Value()"<< endl;
	}
	~Value()
	{
		cout << "~Value()" << endl;
	}
};
void Vector_user()
{
	vector<Value> vec;
	//vec.resize(10);
	vec.reserve(10);
	cout << vec.capacity()<< endl;
	cout << vec.size()<< endl;
}
int main()
{
	Vector_user();
	return 0;
}

在這里插入圖片描述

resize():改變?nèi)萜髦锌纱鎯?chǔ)元素的個(gè)數(shù)size和capacity,并調(diào)用默認(rèn)的構(gòu)造函數(shù)

#include <iostream>
#include <vector>
using namespace std;
class Value
{
public:
	Value()
	{
		cout << "Value()"<< endl;
	}
	~Value()
	{
		cout << "~Value()" << endl;
	}
};
void Vector_user()
{
	vector<Value> vec;
	vec.resize(10);
	//vec.reserve(10);
	cout << vec.capacity()<< endl;
	cout << vec.size()<< endl;
}
int main()
{
	Vector_user();
	return 0;
}

在這里插入圖片描述

(5)push_back和emplace

1.push_back()

#include <iostream>
#include <vector>
using namespace std;
class Object
{
private:
	int val;
public:
	Object(int x = 0):val(x)
	{
		cout << "Object(int x)"<< endl;
	}
	Object(const Object& src): val(src.val)
	{
		cout << "Object(const Object& src)" << endl;
	}
	Object(Object&& src) : val(src.val)
	{
		cout << "Object(Object&& src)" << endl;
	}
	Object& operator=(const Object& src)
	{
		val = src.val;
		cout << "=" << endl;
		return *this;
	}
	Object& operator=(Object&& src)
	{
		val = src.val;
		cout << "=&" << endl;
		return *this;
	}
	~Object()
	{
		cout << "~Object()" << endl;
	}
};
void fun()
{
	std::vector<Object> vcobj;
	vcobj.reserve(5);
	vcobj.push_back(10);
	//vcobj.push_back(Object(10));
}
int main()
{
	fun();
	return 0;
}

push_back(10);push_back(Object(10));兩種方式構(gòu)造對(duì)象的順序個(gè)數(shù)都相同!

在這里插入圖片描述

Object obj(10);

vcobj.push_back(obj);

在這里插入圖片描述

2. emplace()原位構(gòu)造

void fun()
{
	std::vector<Object> vcobj;
	vcobj.reserve(5);
	vcobj.emplace_back(10);
}

在這里插入圖片描述

void fun()
{
	std::vector<Object> vcobj;
	vcobj.reserve(5);
	vcobj.emplace_back(Object(10));
}

在這里插入圖片描述

void fun()
{
	std::vector<Object> vcobj;
	vcobj.reserve(5);
	Object obj(10);
	vcobj.emplace_back(obj);
}

在這里插入圖片描述

(6)關(guān)于原位構(gòu)造(定位new + 完美轉(zhuǎn)發(fā))

定位new:直接在指定的地址空間內(nèi)調(diào)用構(gòu)造函數(shù)

完美轉(zhuǎn)發(fā):保留傳參的右值屬性

可變參數(shù):根據(jù)傳參個(gè)數(shù)類型,調(diào)用不同的構(gòu)造函數(shù)

template<class T, class ...Arg>
void Make(T* p, Arg... arg)
{
	new(p) T(std::forward<Arg...>(arg)...);
}
int main()
{
	//1.開辟空間
	Object* p = (Object*)malloc(sizeof(Object));
	//2.在p指向的地址空間調(diào)用構(gòu)造Object(10)
	Make(p, 10);
	//3.釋放空間并調(diào)用析構(gòu)函數(shù)
	delete p;
	return 0;
}

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!  

相關(guān)文章

  • 380行C++代碼實(shí)現(xiàn)掃雷小游戲

    380行C++代碼實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了380行C++代碼實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++使用Kruskal和Prim算法實(shí)現(xiàn)最小生成樹

    C++使用Kruskal和Prim算法實(shí)現(xiàn)最小生成樹

    這篇文章主要介紹了C++使用Kruskal和Prim算法實(shí)現(xiàn)最小生成樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 使用C語(yǔ)言繪制柱形圖的示例代碼

    使用C語(yǔ)言繪制柱形圖的示例代碼

    常用的統(tǒng)計(jì)圖有條形圖、柱形圖、折線圖、曲線圖、餅圖、環(huán)形圖、扇形圖,這篇文章主要為大家介紹了C語(yǔ)言中繪制條形圖和柱形圖的方法,需要的可以參考下
    2024-02-02
  • 深入淺析C++中的#,##,和

    深入淺析C++中的#,##,和

    這篇文章主要介紹了C++中的#,##,和"的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • 劍指offer之判斷鏈表是否包含環(huán)

    劍指offer之判斷鏈表是否包含環(huán)

    今天小編就為大家分享一篇關(guān)于劍指offer之判斷鏈表是否包含環(huán),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • C語(yǔ)言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體

    C語(yǔ)言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體

    大家好,本篇文章主要講的是C語(yǔ)言復(fù)數(shù)的加減及輸出結(jié)構(gòu)體,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • c++重載運(yùn)算符時(shí)返回值為類的對(duì)象或者返回對(duì)象的引用問(wèn)題

    c++重載運(yùn)算符時(shí)返回值為類的對(duì)象或者返回對(duì)象的引用問(wèn)題

    這篇文章主要介紹了c++重載運(yùn)算符時(shí)返回值為類的對(duì)象或者返回對(duì)象的引用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語(yǔ)言中常量指針與指針常量區(qū)別淺析

    C語(yǔ)言中常量指針與指針常量區(qū)別淺析

    這篇文章主要介紹了C語(yǔ)言中常量指針與指針常量區(qū)別,有需要的朋友可以參考一下
    2013-12-12
  • C語(yǔ)言柔性數(shù)組詳解

    C語(yǔ)言柔性數(shù)組詳解

    這篇文章主要介紹了C語(yǔ)言柔性數(shù)組,通過(guò)實(shí)例分析了不完整類型、結(jié)構(gòu)體及柔性數(shù)組等概念,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • C++之內(nèi)存泄漏排查詳解

    C++之內(nèi)存泄漏排查詳解

    這篇文章主要介紹了c++ 如何排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-10-10

最新評(píng)論