免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C++ STL 容器技術(shù)之 vector向量容器

11.3.1 矢量類

1、矢量類的概念:
矢量vector)類提供具有連續(xù)內(nèi)存地址的數(shù)據(jù)結(jié)構(gòu),可通過下標(biāo)運算符[ ]直接有效地訪問矢量的任何元素。

與數(shù)組不同,vector的內(nèi)存用盡時,vector自動分配更大的連續(xù)內(nèi)存區(qū),將原先的元素復(fù)制到新的內(nèi)存區(qū),并釋放舊的內(nèi)存區(qū)。這是矢量類的優(yōu)點。

內(nèi)存分配由分配子(Allocator)完成。分配子也是類,它運用了new和delete運算符,本教材不作進一步討論。

2、矢量類的迭代子:
每個容器都有自己所支持的迭代子類型,迭代子決定了可采用哪種算法。vector支持隨機訪問迭代子,具有最強的功能。vector的迭代子通常實現(xiàn)為vector元素的指針。所謂選擇容器類,實際上很大部分是選擇所支持的迭代子。

3、矢量容器的聲明例:
#include<vector>
……
vector<int> vi; 
//定義存放整形序列的向量容器對象vi,長度為0的空vector
vector<float> vf; 
//存放實型序列的向量容器
vector<char> vch; 
//存放字符序列的向量容器
vector<char*>vstr; 
//存放字符串序列的向量容器

4、矢量容器的構(gòu)造函數(shù):
vector(size_t n); 

//構(gòu)造一個有n個元素的矢量,每個元素都是由默認的構(gòu)造函數(shù)所建立的

vector(size_t n,T& V); 

//T表示矢量的基本類型,如int;為每個元素用同一個對象V來賦初值

vector(first,last); 

//元素的初值由區(qū)間[first,last)指定的序列中的元素復(fù)制而來 

vector(vector<T>& X) 

//復(fù)制構(gòu)造函數(shù)

這些構(gòu)造函數(shù)還可以顯式給出分配子(allocator)對象。

5、對矢量的操作包含了第六章在順序表中所列出的操作,甚至更豐富。每種操作都是成員函數(shù)。對用戶自定義的元素類,要重載“= =”和“<”等比較運算符。

【例11.2】尋找vector容器元素。

6、特殊類型迭代子:
*它們本身也具有五種四級迭代子屬性之一

反轉(zhuǎn)型迭代子(Reverse Iterator):
它是把一切都顛倒過來。正向遍歷一個第一類容器時,如果用了反轉(zhuǎn)迭代子,實際上實現(xiàn)的是反向遍歷。

插入型迭代子(Insertion Iterator):
當(dāng)用普通輸出迭代子來產(chǎn)生一個元素序列時,一旦添加一些元素就得完全重寫。例如普通輸出迭代子可以把一個矢量a的內(nèi)容復(fù)制到另一個矢量b中,復(fù)制可以從矢量b任一元素開始,矢量b對應(yīng)位置上的元素被覆蓋,相當(dāng)于改寫。插入迭代子則可以添加元素,復(fù)制時它可以把矢量a插入到矢量b任一位置。同一個copy()算法用不同類型迭代子,結(jié)果是不同的。

流迭代子(Stream Iterator):
包括輸入流迭代子(Istream_Iterator)和輸出流迭代子(Ostream_Iterator)


簡介:

vector是一種簡單高效的容器,在尾端插入和刪除元素,算法時間復(fù)雜度為O(1)常數(shù)階,其他元素的插入和刪除為O(n)線性階,其中n為vector容器的元素個數(shù)。vector具有自動的內(nèi)存管理功能,對于元素的插入和刪除,可動態(tài)調(diào)整所占用的內(nèi)存空間。

vector應(yīng)用基礎(chǔ):

創(chuàng)建vector對象:

1、vector(const A& a=A()) 創(chuàng)建一個空的vector對象。

如:vector<int> v;

2、vector(size_type n) 創(chuàng)建一個具有n個元素的vector對象,每個vector元素具有它的類型下的默認值。

如:vector<int> v(10);

3、vector(size_type n, const T& value) 創(chuàng)建一個具有n個元素的vector對象,每個元素具有初始值value。

如:vector<int> v(10, 5);

4、vector(const vector&) 通過拷貝一個vector對象的各個元素值,創(chuàng)建一個新的vector對象。

如:vector<int> v1(10, 5);        vector<int> v2(v1);

5、vector(const InputIterator first, const InputIterator last, const A& a=A()) 通過拷貝迭代器區(qū)間[first, last)的元素值,創(chuàng)建一個新的vector對象中,內(nèi)存分配器可省略。

如:int iArray[] = {1,2,3};      vector<int> v(iArray, iArray+3);

初始化賦值:

vector提供的push_back函數(shù)常用來進行vector容器的初始化,push_back函數(shù)在容器的尾端插入新元素value。

void push_back(const T& value)

元素的遍歷訪問:

vector的元素可采用數(shù)組或迭代器的方式進行遍歷訪問。

元素的插入:

insert函數(shù)可在任意位置插入元素,由于插入時需要先將插入位置后面的元素移位,以空出一個位置進行插入,因此insert函數(shù)的執(zhí)行比push_back函數(shù)稍為耗時。insert函數(shù)的一個常用模板原型為:

iterator insert(iterator pos, const T& x)

元素的刪除:

iterator erase(iterator pos) 刪除迭代器pos所指的元素

iterator erase(iterator first, iterator last) 刪除迭代器區(qū)間[first, last)的所有元素

void clear() 調(diào)用erase函數(shù),清除所有元素

元素的反向遍歷:

reverse_iterator rbegin()

reverse_iterator rend()

vector的交換:

void swap(vector&)

其它常用函數(shù):

bool empty()

size_type size()

size_type max_size()

size_type capacity()

reference front()

reference back()

void pop_back()

舉例分析:

1、

//用數(shù)組方式訪問vector
#include <iostream>
#include <vector>
using namespace std;

int main(void)
{
vector<int> v;
v.push_back(20);
v.push_back(26);
v.push_back(39);
for (int i=0; i<v.size(); i++)
{
   cout << "v[" << i << "] = " << v[i] << endl;
}

return 0;
}

2、

//用迭代器訪問vector元素
#include <iostream>
#include <vector>
using namespace std;

int main(void)
{
vector<int> v;
v.push_back(20);
v.push_back(26);
v.push_back(39);
vector<int>::iterator i, iend;
iend = v.end();
int j;
for(i=v.begin(), j=0; i!=iend; i++, j++)
{
   cout << "v[" << j << "] = " << *i << endl;
}

return 0;
}

3、

//在任意位置插入vector元素
#include <vector>
#include <iostream>
using namespace std;

int main(void)
{
vector<int> v;
v.push_back(6);
v.push_back(7);
v.push_back(8);
v.push_back(10);
v.insert(v.begin()+3, 9);
v.insert(v.begin(), 5);
v.insert(v.end(), 11);
for (int i=0; i<v.size(); i++)
{
   cout << "v[" << i << "] = " << v[i] << endl;
}

return 0;
}

4、

//利用erase和clear函數(shù)刪除vector元素
#include <iostream>
#include <vector>
using namespace std;

class MyAnimal
{
public:
MyAnimal(char* name, int age) { this->name = name; this->age = age; }
~MyAnimal() {}

char* name;
int age;
};

int main(void)
{
MyAnimal* pDog = new MyAnimal("Dog", 1);
MyAnimal* pMonkey = new MyAnimal("Monkey", 2);
MyAnimal* pChicken = new MyAnimal("Chicken", 3);
MyAnimal* pSnake = new MyAnimal("Snake", 4);

vector<MyAnimal*> v;
v.push_back(pDog);
v.push_back(pMonkey);
v.push_back(pChicken);
v.push_back(pSnake);

delete pMonkey;
v.erase(v.begin() + 1);
vector<MyAnimal*>::iterator i, iend;
iend = v.end();
for (i=v.begin(); i!=iend; i++)
{
   cout << (*i)->name << " " << (*i)->age << endl;
}
v.clear();

return 0;
}

5、

//反向遍歷vector元素
#include <vector>
#include <iostream>
using namespace std;

int main(void)
{    
vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(5);
v.push_back(7);
v.push_back(9);
vector<int>::reverse_iterator ri, riend;
riend = v.rend();
for (ri=v.rbegin(); ri!=riend; ri++)
{
   cout << *ri << endl;
}

return 0;
}

6、

//兩個vector容器元素的交換
#include <vector>
#include <iostream>
using namespace std;

void print(vector<int>& v)
{
for (int i=0; i<v.size(); i++)
{
   cout << v[i] << " ";
}
cout << endl;
}

int main(void)
{
vector<int> v1;
v1.push_back(11);
v1.push_back(12);
v1.push_back(13);
cout << "v1 = ";
print(v1);

vector<int> v2;
v2.push_back(90);
v2.push_back(92);
cout << "v2 = ";
print(v2);

v1.swap(v2);
cout << "v1與v2交換后" << endl;
cout << "v1 = ";
print(v1);
cout << "v2 = ";
print(v2);

return 0;
}

7、

//vector容器的一些統(tǒng)計函數(shù)的使用
#include <vector>
#include <iostream>
using namespace std;

void print(vector<int>& v)
{
cout << "empty = " << v.empty() << endl;
cout << "size = " << v.size() << endl;
cout << "max_size = " << v.max_size() << endl;
cout << "capacity = " << v.capacity() << endl;
cout << endl;
}

int main(void)

vector<int> v;
print(v);

//添加5個元素
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5); 
print(v);

//再添加4個元素
v.push_back(6);
v.push_back(7);
v.push_back(8);
v.push_back(9);
print(v);

//調(diào)整vector數(shù)據(jù)空間大小
v.reserve(30);
print(v);

return 0;
}

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C++基礎(chǔ)相關(guān)STL::List 用法簡單介紹
標(biāo)準模板類(STL)(四),容器的比較、對比和總結(jié)
Vector 容器
UC頭條:深入探究C 中的STL
insert 關(guān)聯(lián)容器
STL常用查找算法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服