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

C++?容器?Vector?的使用方法

 更新時間:2022年06月06日 08:37:15   作者:??zidea????  
這篇文章主要介紹了C++?容器?Vector?的使用方法,Vector?是一個能夠存放任意類型的動態(tài)數(shù)組,有點類似數(shù)組,是一個連續(xù)地址空間,下文更多詳細內(nèi)容的介紹,需要的小伙伴可以參考一下

前言:

我們都是帶著問題學(xué)習(xí),假設(shè)一個任務(wù),也可以理解為一個問題,通過找解決方案來提升自己 c++ 的編程能力,嘗試這是否一條好的路線,希望找到這種學(xué)習(xí)方式有效

問題簡單描述一下,就是從以字符串,課程名稱組成的集合中將一些包含特定文字,將其從列表中刪除

Vector簡介

  • Vector 是一個能夠存放任意類型的動態(tài)數(shù)組,有點類似數(shù)組,是一個連續(xù)地址空間,

Vector 與數(shù)組

  • Vector 是支持動態(tài)空間大小調(diào)整
  • 數(shù)組往往在定義需要指定固定大小
#include<vector>

要使用 vector 需要引入一下其頭文件

創(chuàng)建 vector 的各種方法

  • 創(chuàng)建一個 T 類型的空 vector
  • 創(chuàng)建時可以指定容量大小
  • 創(chuàng)建時不但可以指定容量大小,還可以指定元素初始值
  • 創(chuàng)建一個基于已有 vector 的拷貝
  • 基于數(shù)組來創(chuàng)建 vector
vector<int> v1;
vector<int> v2(5);
vector<int> v3(5, 0);
vector<int> copyOf(v3);
int arr[] = { 1,2,3,5,7,9 };
vector<int> v5(arr, arr + 6);
	v5.push_back(11);

向一個 vector 中添加元素

	bool isEmpty = v1.empty();

訪問 vector 的元素

  • 調(diào)用 vector::at()
  • 調(diào)用 vector::operator[]

兩者的區(qū)別在于

  • operator[] 提供類似數(shù)組的存取方式,但不做邊界是否越界檢查,訪問效率高
  • at() 進行邊界檢查,訪問越界則拋出 exception 效率不容 operator[],這樣開銷比較大,因為我們用 c++ 主要還是要考慮到效率
vector<wstring> v;
v.reserve(10);

for (size_t i = 0; i < 3; i++) {
        wstringstream wss;
        wss << "[" << i << "]" << endl;
        v.push_back(wss.str());
}
try
{
        wstring wsz = v.at(5);
}
catch (const std::exception& ex)
{
        cout << ex.what() << endl;
}

刪除元素

  • clear 清除整個 vector
  • pop_back:彈出 vector 末尾元素
  • erase: 刪除 vector 中某一位置的元素

使用 erase 來刪除某一個位置元素,可以指定 iterator 來刪除某一個元素,也可以通過條件函數(shù)找到 vector 中需要刪除的元素,這里 remove_if 為例說明

vector<string> tuts;
tuts.push_back("machine learning basic tutorial");
tuts.push_back("deep learning basic tutorial");
tuts.push_back("transformer tutorial");

for (int i = 0; i < tuts.size(); i++) {
        cout << tuts[i] << endl;
}

首先我們需要集合來承載這些字符串,這里我選擇了 vector 作為容器,這樣就得到了一個集合 tuts

vector<string> tuts;
tuts.push_back( "machine learning basic tutorial" );
tuts.push_back("deep learning basic tutorial");
tuts.push_back("transformer tutorial");

for (int i = 0; i < tuts.size(); i++) {
    cout << tuts[i] << endl;
    string::size_type idx;
    idx = tuts[i].find("basic tutorial");

    if (idx == string::npos) {

            cout << "Not Found" << endl;
    }
    else {
            cout << "Found" << endl;
    }
}

這里定義這個函數(shù) isContainsBasicTut ,這個代碼是不是讓大家聯(lián)想到 map,這個函數(shù)通常會接受一個數(shù)組元素做輸入,返回一個 bool 類型值,滿足一定條件返回 true

bool isContainsBasicTut(string tutName) {
	string::size_type idx;
	idx = tutName.find("basic tutorial");
	if (idx == string::npos) {

		return false;
	}
	else {
		return true;
	}
}

然后可以調(diào)用 tuts 的 erase 也就是 vector 的刪除方法,這里 remove_if 方法并不會實際移除序列中的元素,只是將符合條件元素移動到容器末尾并返回指向第一個移除元素的位置的迭代器,接下來 erase 對 vector 容器中根據(jù) remove_if 提供的信息來對元素進行清除。

vector<string> tuts;
tuts.push_back( "machine learning basic tutorial" );
tuts.push_back("deep learning basic tutorial");
tuts.push_back("transformer tutorial");

tuts.erase( remove_if(tuts.begin(), tuts.end(), isContainsBasicTut), tuts.end());

for (int i = 0; i < tuts.size(); i++) {
        cout << tuts[i] << endl;
}

接下來我們再通過一例子來看在實際開發(fā)中如何使用 if_remove

bool isOdd(int num) {
    return ((num % 2) == 1);
}

int main()
{
    vector<int> nums{ 1, 2, 3, 10, 12, 15, 17, 20 };
    remove_if(nums.begin(), nums.end(), isOdd);
    for (vector<int>::iterator it = nums.begin(); it != nums.end(); it++)
            cout << *it << "\t";

    return 0;
}

首先還是定義

到此這篇關(guān)于C++ 容器 Vector 的使用方法的文章就介紹到這了,更多相關(guān)C++ 容器Vector內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言文件操作詳情(二)

    C語言文件操作詳情(二)

    這篇文章主要介紹了C語言文件操作詳情,文章基于上一篇文章的內(nèi)容繼續(xù)展開C語言文件操作的相關(guān)詳情,需要的小伙伴可以參考一下
    2022-04-04
  • 淺析C++中boost.variant的幾種訪問方法

    淺析C++中boost.variant的幾種訪問方法

    variant類型在C++14并沒有加入,若想在不支持C++17的編譯器上使用variant類型,我們可以通過boost的variant類型,variant類型可以表示任意一種類型和any類型有些相似,但還是有些區(qū)別下面將淺談variant的幾種訪問方法,感興趣的朋友們下面來一起看看吧。
    2016-10-10
  • C語言由淺入深講解文件的操作下篇

    C語言由淺入深講解文件的操作下篇

    C語言具有操作文件的能力,比如打開文件、讀取和追加數(shù)據(jù)、插入和刪除數(shù)據(jù)、關(guān)閉文件、刪除文件等。與其他編程語言相比,C語言文件操作的接口相當(dāng)簡單和易學(xué)
    2022-04-04
  • 基于Qt OpenCV實現(xiàn)圖像數(shù)據(jù)采集軟件

    基于Qt OpenCV實現(xiàn)圖像數(shù)據(jù)采集軟件

    這篇文章主要為大家詳細介紹了如何利用Qt+OpenCV實現(xiàn)圖像數(shù)據(jù)采集軟件,文中的示例代碼講解詳細,對我學(xué)習(xí)或工作有一定參考價值,感興趣的可以了解一下
    2022-07-07
  • C語言實現(xiàn)密碼本

    C語言實現(xiàn)密碼本

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)密碼本,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言函數(shù)的基本使用和遞歸詳解

    C語言函數(shù)的基本使用和遞歸詳解

    一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進入新的一層
    2021-09-09
  • C++深入講解對象的銷毀之析構(gòu)函數(shù)

    C++深入講解對象的銷毀之析構(gòu)函數(shù)

    構(gòu)造函數(shù)在創(chuàng)建對象時被系統(tǒng)自動調(diào)用,而析構(gòu)函數(shù)(Destructor)在對象被撤銷時被自動調(diào)用,相比構(gòu)造函數(shù),析構(gòu)函數(shù)要簡單的多
    2022-04-04
  • C++字符串輸入緩沖區(qū)機制詳解

    C++字符串輸入緩沖區(qū)機制詳解

    緩沖區(qū)是用來存放流中的數(shù)據(jù),本文詳細的介紹了C++字符串輸入緩沖區(qū)機制,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-10-10
  • C++內(nèi)聯(lián)函數(shù)詳情

    C++內(nèi)聯(lián)函數(shù)詳情

    這篇文章主要介紹了C++內(nèi)聯(lián)函數(shù),文章主要圍繞C++內(nèi)聯(lián)函數(shù)的相關(guān)資料展開詳細內(nèi)容,需要的朋友可以參考一下,希望對大家有所幫助
    2021-11-11
  • C++之文件輸入/輸出流類解讀

    C++之文件輸入/輸出流類解讀

    這篇文章主要介紹了C++之文件輸入/輸出流類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論

永春县| 新河县| 阿克| 普陀区| 旬阳县| 广安市| 平湖市| 大石桥市| 比如县| 庆城县| 桐柏县| 遂昌县| 旬阳县| 河池市| 阳高县| 中方县| 富蕴县| 邓州市| 慈利县| 称多县| 寻乌县| 肇庆市| 沧州市| 庐江县| 东兴市| 元江| 青田县| 疏勒县| 宁乡县| 定安县| 长宁县| 东山县| 海淀区| 三原县| 台江县| 古蔺县| 犍为县| 枞阳县| 福建省| 汤原县| 泽库县|