C++容器vector和迭代器iterator
vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。引入標頭檔案
#include<vector>
1.vector物件的定義和初始化
[cpp]- vector<T> v1 vector儲存型別為T的物件。預設建構函式,v1為空
- vector<T> v2(v1) v2是v1的一個副本
- vector<T> v3(n,i) v3包含n個值為i的元素
- vector<T> v4(n) v4含有值初始化的元素的n個副本
如果沒有指定元素的初始化式,標準庫將自行提供一個元素初始值進行初始化,初始值取決於儲存在vector中元素的資料型別。
例:
vector儲存內建型別如int,那麼標準庫將用0值建立元素初始化式
vector<int> res(10); //10個元素,每個被初始化為0
vector儲存的是含有建構函式的類型別的元素,標準庫將用該型別的預設的建構函式建立元素的初始化式
vector<string> res(10) //10個元素,每個被初始化為空字串
還有第三種情況,元素型別可能是沒有定義建構函式的類型別。這種情況下,標準庫仍產生一個帶初始值的物件,這個物件的每個成員進行了值初始化。
2.vector物件的操作
幾種重要的操作
- 新增或移除元素的方法
vec.push_back()
- 新增元素至 vector 的尾端,必要時會進行記憶體配置。vec.pop_back()
- 刪除 vector 最尾端的元素。vec.insert()
- 插入一個或多個元素至 vector 內的任意位置。vec.erase()
- 刪除 vector 中一個或多個元素。vec.clear()
- 清空所有元素。
- 取得長度/容量
vec.size()
- 取得 vector 目前持有的元素個數。vec.empty()
- 如果 vector 內部為空,則傳回 true 值。vec.capacity()
- 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。
- 重新配置/重設長度
vec.reserve()
- 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。vec.resize()
- 改變 vector 目前持有的元素個數。
- 迭代 (Iterator)
vec.begin()
- 回傳一個Iterator,它指向 vector 第一個元素。vec.end()
- 回傳一個Iterator,它指向 vector 最尾端元素的下一個位置(請注意:它不是最末元素)。vec.rbegin()
- 回傳一個反向Iterator,它指向 vector 最尾端元素的。vec.rend()
- 回傳一個Iterator,它指向 vector 的第一個元素。
3.迭代器簡介
除了使用下標來訪問vector物件的元素外,標準庫還提供了訪問元素的方法:使用迭代器。迭代器是一種檢查容器內元素並且遍歷元素的資料型別。
1.容器的iterator型別
每種容器型別都定義了自己的迭代器型別,如vector: vector<int> ::iterator iter; 變數名為iter。
2.begin和end操作
每種容器都定義了一隊命名為begin和end的函式,用於返回迭代器。
- 如果容器中有元素的話,由begin返回的元素指向第一個元素。
vector<int>::iterator iter=v.begin();
若v不為空,iter指向v[0]。
- 由end返回的迭代器指向最後一個元素的下一個,不存在,若v為空,begin和end返回的相同。
*iter=0;
iter++即將迭代器向前移動一個位置
即將v[0]賦值為0,由end返回的不允許進行解操作。
- ==和!=操作符來比較兩個迭代器,若兩個迭代器指向同一個元素,則它們相等,否則不想等。
使用舉例:
[cpp]- #include <iostream>
- #include<vector>
- usingnamespace std;
- int main()
- {
- vector<int> v;
- cout<<"在末尾插入元素 "<<endl;
- for(int i=0;i<10;i++){
- v.push_back(i);
- }
- cout<<"刪除末尾元素 "<<endl;
- v.pop_back();
- cout<<"使用front()、at()、back() "<<endl;
- cout<<v.front()<<"-"<<v.at(4)<<"-"<<v.back()<<endl;
- cout<<"判斷不為空、插入元素"<<endl;
- for(int i=0;i<10;i++){
- if(!v.empty())
- v.push_back(++i);
- }
- cout<<"列印vector陣列元素"<<endl;;
- for(size_t i=0;i<v.size();i++){
- cout<<"第"<<i<<"個元素"<<":"<<v[i]<<endl;
- }
- return 0 ;
- #include <iostream>
- #include<vector>
- #include <cstdlib>
- usingnamespace std;
- int main()
- {
- vector<int> v1;
- vector<int>::iterator it;
- for(int i=0;i<10;i++){
- v1.push_back(i);
- }
- cout<<"正向輸出:"<<endl;
- for(it=v1.begin();it!=v1.end();it++){
- cout<<*it<<" ";
- }
- cout<<endl;
- cout<<"反向輸出:"<<endl;
- vector<int>::reverse_iterator rit;
- for(rit=v1.rbegin();rit!=v1.rend();rit++){
- cout<<*rit<<" ";
- }
- int arr[]={0,1,2,3,4,5,6,7,8,9};
- vector<int> v2(arr,arr+10); //將arr陣列複製到容器v2中去
- vector<int>::iterator it2;
- for(it2=v2.begin();it2!=v2.end();it2++){
- cout<<*it2<<" ";
- }
- vector<int> v3(v2.begin(),v2.end());//利用建構函式初始化容器v3
- vector<int>::iterator it3;
- for(it3=v3.begin();it3!=v3.end();it3++){
- cout<<*it3<<" ";
- }
- //erase和insert對於const iterater和const reverse_itetater並不支援
- vector<int> v4(10,10);
- vector<int>::iterator it4;
- for(it4=v4.begin();it4!=v4.end();it4++){
- cout<<*it4<<" ";
- }
- //resize()的使用
- cout<<endl<<"v1大小:"<<v1.size()<<endl<<"v2大小:"<<v2.size()
- <<endl<<"v3大小:"<<v3.size()<<endl<<"v4大小:"<<v4.size()
- <<endl;
- v3.resize(10,0);
- cout<<"resize()為10後v3的大小:"<<v3.size()<<endl;
- for(int i=0;i<(int)v3.size();i++){
- cout<<v3[i]<<" ";
- }
- v3.resize(5);
- cout<<endl<<"resize()為5後v3的大小:"<<v3.size()<<endl;
- for(int i=0;i<(int)v3.size();i++){
- cout<<v3[i]<<" ";
- }
- //擦除的使用
- v1.clear();
- cout<<endl<<"v1全擦除後的大小:"<< v1.size()<<endl;
- cout<<"插入操作insert()";
- vector<int>::iterator itx;
- itx=v1.begin();
- cout<<endl<<"在位置1插入88"<<endl;;
- v1.insert(itx,88);//在開始的位置插入111,
- for(int i=0;i<(int)v1.size();i++){
- cout<<v1[i]<<" ";
- }
- cout<<endl;
- v1.insert(itx,10,5);//從位置0開始連續插入10個5;
- for(int i=0;i<(int)v1.size();i++){
- cout<<v1[i]<<" ";
- }
- cout<<endl<<"擦除位置5到位置10的元素"<<endl;
- v1.erase(itx+5,itx+10); //擦除位置5到位置10的元素、
- for(int i =0;i<(
相關推薦
C++容器vector和迭代器iterator
vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。引入標頭檔案#include<vector>1.vector物件的定義和初始化[cpp]vector<T> v1
容器vector和迭代器iterator的學習使用
vector、algorithm、deque、functional、iterrator、list、map、memory、numeric、queue、set、stack、utility vector的宣告: vector<type> vec;size();r
序列容器vector和迭代器
一、容器vector vector類模板提供了一種佔用連續記憶體地址的資料結構。這使得它可以高效,直接的利用下標運算子[]訪問vector中的任一元素,當一個vecto的記憶體空間耗盡時,它會分配一個更大的連續空間(陣列),把原先的資料複製(或移動)到新的空間(陣列),並把原來的空間(陣
java-Collection集合、List集合、Vector集合和迭代器Iterator、ListIterator的使用
1、物件陣列的概述和使用 * A:案例演示 * 需求:我有5個學生,請把這個5個學生的資訊儲存到陣列中,並遍歷陣列,獲取得到每一個學生資訊。 * Student[] arr = new Student[5]; //儲存學生物件 arr[0] = new Student("張三
標準庫vector型別和迭代器iterator型別
對C++ Primer 中文版第4版 第三章標準庫型別中的vector型別和迭代器iterator型別做一個總結。 vector稱為容器,是同一種類型的物件的集合。一個容器中的所有物件都必須是同一種類型。 1.使用vector之前,必須包含相應的標頭檔案。宣告如下:
Python中的生成器(generator)和迭代器(Iterator)
Python是一種動態的程式語言,那就具有動態程式語言的特性,可以在執行時改變其結構,比如新的函式,物件、程式碼也可以引進,已有的函式可以被刪除。。。目前最常用的可以歸納為以下幾點:1.執行的過程中給物件繫結(新增)屬性,2.執行過程中給類繫結(新增)屬性,3.執行的過程中給類繫結(新增)方法,4.
python 入門第三課 迭代物件Iterable和迭代器Iterator
迭代物件Iterable和迭代器Iterator __author__ = 'admin' from collections.abc import Iterator from collections.abc import Iterable print(isinstance([],Iterable)) p
Qt: 容器類和迭代器類、foreach關鍵字
引言: 容器類和迭代器類提供 刪除、修改、插入和儲存資料的功能。 這兩種類可以將各種資料型別的資料以元素為單位進行儲存。 例如: 不使用Qt提供的容器類:如果要將QString型別的資料儲存到陣列,則
C++標準模板庫 迭代器 iterator 詳解(一)
[cpp] view plaincopyprint? #include <vector> #include <iostream> #include <list> #include <
C# 入門(14) 列舉器(enumerator)和迭代器(iterator)
C#的列舉器和迭代器 列舉器一般用來foreach的,而迭代器在Unity中常用來當協程(Coroutine)用。 列舉器 IEnumerator介面 實現IEnumerator介面的類就可以foreach了,當然前提是實
C/C++容器和迭代器理解
為什麼要有容器? 我知道有陣列,但陣列有一個弊端,它是固定的,不可變。這個經常會導致出現數組越界導常的錯誤。並且還需要事先知道這個陣列的長度才可以定義。 但很多時候,我們並不知道未來將會發生什麼,所以我們創造了容器,它是不固定的,可變的,可以根據元素的增加而增加,每次增加原陣列的1.5倍。為什麼是1.5
C++ 中使用for迴圈和迭代器遍歷容器
之前一直看的是第四版的《C++ Primer》,裡面貌似只介紹了用迭代器遍歷容器(可能是受當時版本所限),這裡記錄下如何用for迴圈來遍歷容器(也可遍歷普通陣列) class Solution{ // C++ 中預設的成員函式型別是private,
當C++容器的迭代器iterator遇到刪除函式erase時
C++中添加了各種各樣的STL容器,不僅數量眾多,而且功能強大,如果能夠正常使用,可以使我們省去諸多時間。迭代器(iterator)是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器物件代表容器中的確定的地址,簡單點就是每個“節點”物件的“指標
vector物件的定義和初始化以及vector迭代器iterator
向vector新增元素 push_back()操作接受一個元素值,並將它作為一個新的元素新增到vector物件的後面,也就是“插入(push)”到vector物件的“後面(back)”: vector迭代器 除了使用下標來訪問vector物件的元素外,標準庫還提供了另一種檢測元素的方法:使用迭代器(itera
c++ 數組皇冠和體育平臺出租指針(vector和叠代器的低級復合類型)
更改 平臺出租 amp 通過 follow code ref 下標 萬能 一、數組皇冠體育平臺出租 haozbbs.com Q1446595067 1.數組的缺點:數組的長度是固定的,無法改變大小;無法知道數組的大小;數組也不提供push_back等類型的操作,用下標進
C++標準庫vector及迭代器【轉】
(轉自:https://blog.csdn.net/zhy_cheng/article/details/8041940?utm_source=blogxgwz46) vector是同一種物件的集合,每個物件都有一個對應的整數索引值。和string物件一樣,標準庫將負責管理與儲存元素相關的類存。
Python迭代器Iterator和生成器generator
容器(container) 容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in, not in關鍵字判斷元素是否包含在容器中。通常這類資料結構把所有的元素儲存在記憶體中(也有一些特例,並不是所有的元素都放在記憶體,比如迭代器和生成器物件) 可迭代物
迭代器(Iterator) 和 生成器 (Generator) (八)
迭代器與生成器這一章節還沒有看的恨透,只把這一章節的例子全看完了,也看懂了。但是自己寫不出這樣優秀的程式碼。這是我缺少的技能。 // 迭代器(Iterator) 和 生成器(Generator) // 迭代器是一種特殊物件
Iterator使用迭代器這個訪問方法,可以讓開發人員不需要了解訪問的容器的底層結構,就可以對容器遍歷 迭代器是輕量級的容器
package com.java.Interview; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestIterato
迭代器Iterator和ListIterator
Iterator迭代器 屬於設計模式,提供了一個方法,對集合/容器內的元素進行遍歷,而不用關注底層實現細節,達到資料與上層遍歷解耦的目的.(解耦: 訪問邏輯從不同型別的集合類中抽取出來,接觸兩者間的聯合關係。) Iterator迭代器提供的三種方法:(迭代器直接操作