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

【C++ STL容器】:vector存放數(shù)據(jù)以及存放自定義的數(shù)據(jù)類型

這篇具有很好參考價值的文章主要介紹了【C++ STL容器】:vector存放數(shù)據(jù)以及存放自定義的數(shù)據(jù)類型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

時不可以茍遇,道不可以虛行。


STL 中最常用的容器為:vector,暫且把它理解為我們之前學過的數(shù)組Array。文章來源地址http://www.zghlxwxcb.cn/news/detail-615367.html

一、創(chuàng)建一個vector容器(數(shù)組)

  • 添加頭文件:#include <vector>
	vector<int> v;

二、向容器中插入數(shù)據(jù)

  • 利用內(nèi)置函數(shù):push_back()
 	v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);

三、通過迭代器訪問容器中的數(shù)據(jù)

1、利用起始和結(jié)束兩個迭代器

  • 先聲明兩個迭代器,一個指向容器中的第一元素,一個指向容器中的最后一個元素的下一個位置
    如何用vector存數(shù)據(jù),C++,c++,算法,開發(fā)語言
  • 然后利用一層 while 循環(huán),依次遍歷容器中的元素。
	vector<int>::iterator itBegin = v.begin();   //起始迭代器,指向容器中第一個元素
    vector<int>::iterator itEnd = v.end();       //結(jié)束迭代器,指向容器中最后一個元素的下一個位置
	
	while (itBegin != itEnd) {
         cout << *itBegin << endl;
         itBegin++;
     }

2、直接使用 for 循環(huán)

  • 使用 for 循環(huán),定義一個臨時的起始迭代器指向容器 v 中第一個元素,當 該迭代器 指向位置到達容器 v 中的最后一個元素的下一個位置時,結(jié)束循環(huán)。
	for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << endl;
    }

3、利用 for_each 遍歷算法

  • 需要添加頭文件:#include <algorithm>,標準算法的頭文件
  • 創(chuàng)建一個打印函數(shù)作為這個算法的第三個函數(shù)參數(shù)
	void myPrint(int val) {
	    cout << val << endl;
	}
	
	//最后一個參數(shù)為:傳入函數(shù)名,回調(diào)作用
	for_each(v.begin(), v.end(), myPrint);
  • 跳轉(zhuǎn) for_each 函數(shù)的定義,其實現(xiàn)方法也是使用一層 for 循環(huán)。
    如何用vector存數(shù)據(jù),C++,c++,算法,開發(fā)語言
	for_each(_InputIterator __first, _InputIterator __last, _Function __f)
    {
	      // concept requirements
	      __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
	      __glibcxx_requires_valid_range(__first, __last);
	      for (; __first != __last; ++__first)
		  		__f(*__first);
	      return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant.
    }

四、存儲自定義數(shù)據(jù)類型

  • 定義一個 Person 類:
class Person {
public:
    Person(string name, int age) {
        this->m_Name = name;
        this->m_Age = age;
    }

    string m_Name;
    int m_Age;
};

  • 定義一個存儲自定義數(shù)據(jù)類型的容器:
	vector<Person> v;

  • 定義 Person 類對象,作為存儲數(shù)據(jù):
	Person p1("a", 1);
    Person p2("b", 2);
    Person p3("n", 3);
    Person p4("m", 3);
    Person p5("u", 3);

  • 向容器中添加數(shù)據(jù):
	v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);
    v.push_back(p5);

  • 遍歷容器中的數(shù)據(jù):(提示: <> 中的數(shù)據(jù)類型是什么,(*it) 取出來的東西就是什么)
  • 例如這里:<> 中的是 Person,所以 (*it) 表示的是 Person 對象,it 表示的是 Person 對象的地址,也可以直接通過 it->m_Nameit->m_Age (地址指向)的方式,取出數(shù)據(jù)。
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout << "姓名:" << (*it).m_Name << " 年齡:" << (*it).m_Age << endl;
	}
	for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
		cout << "姓名:" << it->m_Name << " 年齡:" << it->m_Age << endl;
	}

五、存儲自定義的指針數(shù)據(jù)類型

  • 定義一個 Person 類:
class Person {
public:
    Person(string name, int age) {
        this->m_Name = name;
        this->m_Age = age;
    }

    string m_Name;
    int m_Age;
};

  • 定義一個存儲自定義數(shù)據(jù)類型的容器:
	vector<Person*> v;

  • 定義 Person 類對象,作為存儲數(shù)據(jù):
	Person p1("a", 1);
    Person p2("b", 2);
    Person p3("n", 3);
    Person p4("m", 3);
    Person p5("u", 3);

  • 向容器中添加數(shù)據(jù),存放指針的話,需要在地址前面多加上一個取址符號(&
	v.push_back(&p1);
    v.push_back(&p2);
    v.push_back(&p3);
    v.push_back(&p4);
    v.push_back(&p5);

  • 遍歷容器的數(shù)據(jù):(提示: <> 中的數(shù)據(jù)類型是什么,(*it) 取出來的東西就是什么)
  • 此時 <> 的是 Person* ,所以 (*it) 表示的是 Person 對象的地址,可以通過 (*it)->m_Name(*it)->m_Age 的方式,取出數(shù)據(jù)。

到了這里,關(guān)于【C++ STL容器】:vector存放數(shù)據(jù)以及存放自定義的數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • C++ stl容器vector的底層模擬實現(xiàn)

    C++ stl容器vector的底層模擬實現(xiàn)

    目錄 前言:?? 1.成員變量,容量與大小 2.構(gòu)造函數(shù) 無參構(gòu)造: 帶參的使用值進行構(gòu)造: ?使用迭代器區(qū)間進行構(gòu)造: 3.交換 4.拷貝構(gòu)造 5.賦值重載 6.迭代器 7.擴容 reserve: resize: 8.插入與刪除 insert: erase: insert迭代器失效問題: erase迭代器失效問題: 9.頭插頭刪 10.[]重載

    2024年04月15日
    瀏覽(29)
  • 【C++】:C++中的STL序列式容器vector源碼剖析

    【C++】:C++中的STL序列式容器vector源碼剖析

    vector定于與stl_vector.h頭文件中 例如: vector的數(shù)據(jù)結(jié)構(gòu)非常簡單:一個線性連續(xù)空間 下面介紹vector的3個數(shù)據(jù)結(jié)構(gòu): start:表示目前使用空間的頭 finish:表示目前使用空間的尾 end_of_storage:表示目前可用空間的尾 說明:為了降低空間配置時的速度成本,vector實際配置的大小可

    2024年01月22日
    瀏覽(32)
  • 【C++】:STL源碼剖析之vector類容器的底層模擬實現(xiàn)

    【C++】:STL源碼剖析之vector類容器的底層模擬實現(xiàn)

    構(gòu)造一個空vector size和capacity為0 將_start _finish _endofstorage 都置為空指針即可 傳統(tǒng)寫法 : 1). 新開辟一塊和 v 同樣容量的空間,更新 _start, _finish, _endofstorage 2). 將 v 中的數(shù)據(jù)拷貝到新開辟的空間中 注意 : 不要使用memcpy函數(shù)拷貝數(shù)據(jù),如果數(shù)據(jù)是內(nèi)置類型或淺拷貝的自定義類型

    2024年02月04日
    瀏覽(34)
  • 【C++庖丁解?!縎TL之vector容器的介紹及使用 | vector迭代器的使用 | vector空間增長問題

    【C++庖丁解?!縎TL之vector容器的介紹及使用 | vector迭代器的使用 | vector空間增長問題

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識 ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個完美的句號,讓我們一起加油 vector的文檔介紹 vector是表示可變大小數(shù)組的序列容器。 就像數(shù)組一樣,vector也采用的連續(xù)存儲空間來存

    2024年03月14日
    瀏覽(36)
  • 【C++進階(二)】STL大法--vector的深度剖析以及模擬實現(xiàn)

    【C++進階(二)】STL大法--vector的深度剖析以及模擬實現(xiàn)

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:C++從入門到精通? ? ??代碼倉庫:NEO的學習日記?? ? ??關(guān)注我??帶你學習C++ ? ???? 和string的學習不同 vector即要掌握它的用法 更要會自己去實現(xiàn)一個vector 本章重點: 熟悉STL庫中vector的接口函數(shù) 自己實現(xiàn)一個簡易vector類 本

    2024年02月11日
    瀏覽(28)
  • 第一百二十二天學習記錄:C++提高:STL-vector容器(上)(黑馬教學視頻)

    第一百二十二天學習記錄:C++提高:STL-vector容器(上)(黑馬教學視頻)

    功能: vector數(shù)據(jù)結(jié)構(gòu)和數(shù)組非常相似,也稱為單端數(shù)組 vector與普通數(shù)組區(qū)別: 不同之處在于數(shù)組是靜態(tài)空間,而vector可以動態(tài)擴展 動態(tài)擴展: 并不是在原空間之后續(xù)接新的空間,而是找更大的內(nèi)存空間,然后將原數(shù)據(jù)拷貝新空間,釋放原空間 vector容器的迭代器是支持隨機

    2024年02月14日
    瀏覽(33)
  • 第一百二十三天學習記錄:C++提高:STL-vector容器(下)(黑馬教學視頻)

    第一百二十三天學習記錄:C++提高:STL-vector容器(下)(黑馬教學視頻)

    功能描述: 對vector容器進行插入、刪除操作 函數(shù)原型: 總結(jié): 尾插 push_back 尾刪 pop_back 插入 insert(位置迭代器) 刪除 erase(位置迭代器) 清空 clear 功能描述: 對vector中的數(shù)據(jù)的存取操作 函數(shù)原型: 總結(jié): 除了用迭代器獲取vector容器中元素,[]和at也可以 front返回容器第一個

    2024年02月13日
    瀏覽(24)
  • 【C++進階(五)】STL大法--list模擬實現(xiàn)以及l(fā)ist和vector的對比

    【C++進階(五)】STL大法--list模擬實現(xiàn)以及l(fā)ist和vector的對比

    ??博主CSDN主頁:杭電碼農(nóng)-NEO?? ? ?專欄分類:C++從入門到精通? ? ??代碼倉庫:NEO的學習日記?? ? ??關(guān)注我??帶你學習C++ ? ???? 本篇文章立足于上一篇文章: list深度剖析(上) 請先閱讀完上一篇文章后再閱讀這篇文章! 本章重點: 本章著重講解list的模擬實現(xiàn) list模擬實

    2024年02月09日
    瀏覽(33)
  • <C++>map 容器快速上手|自定義數(shù)據(jù)類型排序的避坑理解

    <C++>map 容器快速上手|自定義數(shù)據(jù)類型排序的避坑理解

    ?作者簡介:熱愛后端語言的大學生,CSDN內(nèi)容合伙人 ?精品專欄:C++面向?qū)ο???系列專欄:C++泛型編程 ??前言 繼 set 容器后,今天總結(jié)一下 map 容器的功能,從零到一快速掌握基本使用與常用接口。 map 在 STL 編程中與 vector 、 list 、 set 具有同等重要的地位,鍵值對的方式

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

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

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

    2024年02月07日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包