您的位置:首页 > 编程语言 > C语言/C++

C++标准库之vector(各函数及其使用全)

2016-03-16 12:49 465 查看
原创作品,转载请注明出处:/article/5237557.html

iterator类型:

iterator:到value_type的访问,value_type是模板的类型

const_iterator:到const value_type的访问

reverse_iterator:reverse_iterator<iterator>

const_reverse_iterator:reverse_iterator<const_iterator>

其中我们常用的是iterator。

函数:

一、Iterator操作相关函数:

1.begin:返回iterator的开始

2.end:返回iterator的结尾

rbegin、rend是由reverse_iterator调用的,功能同

cbegin、cend是由const_iterator调用的,功能同

crbegin、crend是由const_reverse_iterator调用的,功能同

常用来遍历表,例如:

vector<int>::iterator Iter;

vector<int> c;

for(Iter=c.begin();Iter!=c.end();Iter++)

{}

二、capacity相关函数

1.size():容器中元素个数。c.size();

2.max_size():返回最大容量。c.maxsize();

3.resize(n,value):改变容器可以容纳元素的个数为n。如果n小于当前的容器大小,则保留前面n个元素,移除后面的。如果n大于当前容器大小,就扩展容器。value是初始值,如果n大于当前容器大小,则新增加的元素的值为value,若value省略,会自动调用一个默认值。

std::vector<int> c;

for(int i=0;i<10;i++)

c.push_back(i);

c.resize(5);

c.resize(8,10);

c.resize(12);

for(int i=0;i<c.size();i++)

std::cout<<c[i]<<" ";

结果为:1 2 3 4 5 10 10 10 0 0 0 0

4.capacity():当前分配给容器的存储空间大小(元素个数),这并不限制容器的扩展,理论限制容器扩展大小是max_size的值

5.bool empty() const:返回容器是否为空while(!c.empty()){sum+=c.back();
c.pop_back();}

6.void reserve(size_type n):使得capacity至少能容纳n个元素。

7.void shrink_to_fit():减小capacity,使其与容器大小相同

三、元素访问相关函数

1.[ ]操作:获取特定位置的元素。c[i];

2.at(size_type n):返回位置n处的元素。c.at(i),与c[i]差不多

3.front():返回容器中的第一个元素。c.front();

4.back():返回容器中最后一个元素。c.back();

5.data():返回一个指向容器中数组的指针c.data()

int *p=c.data();

*p=10;

++p;

*p=20;

p[2]=100;

则c中存储的前面三个数据为10、20、100

四、容器操作

1.void assign(InputIterator first,InputIterator last)

void assign(size_type n,const value_type& val)给容器分配新的内容,并替换当前内容,同时修改大小,val为初始值

std::vector<int>first;

std::vector<int>second;

std::vector<int>third;

first.assign(7,100);

std::vector<int>::iterator it;

it=first.begin()+1;

second.assign(it,first.end()-1);

int myints[]={1776,7,4};

third.assign(myints,myints+3);

std::cout<<int(first.size())<<" "<<int (second.size())<<" "<<int (third.size())<<endl;

结果为:7 5 3

2.void push_back (const value_type &val):增加一个新的元素。c.push_back(n)

3.void pop_back():移除最后一个元素。c.pop_back()

4.iterator insert(iterator position,const value_type& val):在position处插入元素val

void insert(iterator position,size_type n,const value_type& val):在position处插入n个元素,插入的元素值初始化为val

void insert(iterator position,InputIterator first,InputIterator last):在position处插入数组中从first到last的元素

vector<int> c(3,100);

vector<int>::iterator it;

it=c.begin();

it=c.insert(it,200);

c.insert(it,2,300);

it=c.begin();

vector<int> d(2,400);

c.insert(it+2,d.begin(),d.end());

int s[]={501,502,503};

c.insert(c.begin(),s,s+3);

此时c中元素为:501 502 503 300 300 400 400 200 100 100 100

5.iterator erase(iterator position):删除position处的元素

iterator erase(iterator first,iterator last):删除first到last的元素

std::vector<int> myvector;
for (int i=1; i<=10; i++) myvector.push_back(i);
myvector.erase (myvector.begin()+5);
myvector.erase (myvector.begin(),myvector.begin()+3);
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); ++i)
std::cout << ' ' << myvector[i];

结果为:4 5 7 8 9 10

6.void swap(vector &x):交换两个容器的内容,两个容器中的元素不一定要相等。c.swap(d);

7.void clear():清楚容器中的所有元素。c.clear();

8.iterator emplace(const_iterator position,args&& args):在position处插入一个新的元素。

std::vector<int> myvector = {10,20,30};


auto it = myvector.emplace ( myvector.begin()+1, 100 );


myvector.emplace ( it, 200 );


myvector.emplace ( myvector.end(), 300 );


容器中元素为:10 200 100 20 30 300

9.void emplace_back(args&& args):在最后插入一个元素

五、分配器

allocator_type get_allocator() const:给容器分配空间

std::vector<int> myvector;
int * p;
unsigned int i;
p = myvector.get_allocator().allocate(5);
for (i=0; i<5; i++) myvector.get_allocator().construct(&p[i],i);
std::cout << "The allocated array contains:";
for (i=0; i<5; i++) std::cout << ' ' << p[i];
std::cout << '\n';
for (i=0; i<5; i++) myvector.get_allocator().destroy(&p[i]);
myvector.get_allocator().deallocate(p,5)

六、重载函数

1.重载了操作符"==" '!=' '<' '<=' '>' '>=':对于==来说,首先比较它们的大小,若size相等,则依次比较元素;对于其他运算符,依次比较元素。c==d;

参考:http://www.cplusplus.com/reference/vector/vector/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: