最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ STL中vector容器的使用

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

一、vector

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

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

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

(2)迭代器失效

在這里插入圖片描述

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

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

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

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

增加 vector 的容量到大于或等于 new_cap 的值。若 new_cap 大于當(dāng)前的 capacity() ,則分配新存儲,否則該方法不做任何事。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)萜髦锌纱鎯υ氐膫€數(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)造對象的順序個數(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ù)傳參個數(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é)

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

相關(guān)文章

  • C語言簡明講解預(yù)編譯的使用

    C語言簡明講解預(yù)編譯的使用

    在C語言的程序中包括各種以符號#開頭的編譯指令,這些指令稱為預(yù)處理命令。預(yù)處理命令屬于C語言編譯器,而不是C語言的組成部分,通過預(yù)處理命令可擴(kuò)展C語言程序設(shè)計的環(huán)境
    2022-05-05
  • C++實現(xiàn)區(qū)塊鏈的源碼

    C++實現(xiàn)區(qū)塊鏈的源碼

    這篇文章主要介紹了C++實現(xiàn)區(qū)塊鏈的源碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • C語言實現(xiàn)bmp圖像平移操作

    C語言實現(xiàn)bmp圖像平移操作

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)bmp圖像平移操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 全面了解C語言?static?關(guān)鍵字

    全面了解C語言?static?關(guān)鍵字

    這篇文章主要介紹了全面了解C語言?static?關(guān)鍵字,文章首先通過先介紹一下頭文件的創(chuàng)建展開主題的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • C++的new和delete使用示例詳解

    C++的new和delete使用示例詳解

    這篇文章主要為大家介紹了C++的new和delete使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C++實現(xiàn)職工工資管理系統(tǒng)

    C++實現(xiàn)職工工資管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)簡單的職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實現(xiàn)類似wget的進(jìn)度條效果

    C語言實現(xiàn)類似wget的進(jìn)度條效果

    這篇文章主要介紹了C語言實現(xiàn)類似wget的進(jìn)度條效果的方法,主要是讓大家可以熟練的使用轉(zhuǎn)移符\r,這里推薦給大家,需要的小伙伴參考下。
    2015-03-03
  • C/C++實現(xiàn)目錄監(jiān)視器的方法詳解

    C/C++實現(xiàn)目錄監(jiān)視器的方法詳解

    這篇文章主要介紹了C/C++ 實現(xiàn)目錄監(jiān)視器的方法,然后網(wǎng)上查到的基本就有三種方法,使用FindFirstChangeNotification等系列函數(shù),使用ReadDirectoryChangesW函數(shù)和使用change journals,本文使用了第二種方式來實現(xiàn)一個目錄監(jiān)視,需要的朋友可以參考下
    2024-04-04
  • C語言詳解關(guān)鍵字sizeof與unsigned及signed的用法

    C語言詳解關(guān)鍵字sizeof與unsigned及signed的用法

    這篇文章主要為大家詳細(xì)介紹了C語言關(guān)鍵字sizeof&&unsigned&&signed,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言malloc與calloc區(qū)別詳解

    C語言malloc與calloc區(qū)別詳解

    本文主要介紹了C語言malloc與calloc區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評論

中江县| 陇南市| 太湖县| 澄江县| 呼图壁县| 台湾省| 龙里县| 大同市| 鲜城| 苏尼特左旗| 安平县| 铁岭市| 松阳县| 江西省| 澄城县| 富民县| 施甸县| 淮北市| 临江市| 津市市| 包头市| 同仁县| 威海市| 清水河县| 德保县| 凤阳县| 翁源县| 宁城县| 武陟县| 通道| 阿拉善右旗| 岐山县| 泰州市| 社会| 厦门市| 松江区| 泸溪县| 神农架林区| 罗江县| 鹤峰县| 北碚区|