当前位置:   article > 正文

vector向量容器

vector向量容器

vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组。

vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存。

对于vector容器的容量定义,可以事先定义一个固定大小,然后可以随时调整其大小;也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前面插入新元素。

vector容器有两个重要的方法,begin()和end()。begin()返回的是首元素位置的迭代器,end()返回的是最后一个元素的下一个元素位置的迭代器。


创建vector对象


创建vector对象的时候,可以不带参数,带一个参数,带两个参数:

(1)不指定容器的元素的个数(不带参数)
vector<int> v;
(2)指定容器的大小(带一个参数,表示容器的大小)
vector<double> v(10);
(3)创建一个具有n个元素的向量容器对象,每个元素具有指定的初值(带两个参数,分别表示容器的大小和每个元素的初值)
vector<int> v(10,0);

尾部元素扩张


通常使用push_back()对vector容器在尾部追加新元素。尾部追加元素,vector容器会自动分配新内存空间。

  1. #include<vector>
  2. using namespace std;
  3. int main()
  4. {
  5. vector<int> v;
  6. v.push_back(1);
  7. v.push_back(2);
  8. v.push_back(3);
  9. return 0;
  10. }
上面的代码表示:将1,2,3三个元素从尾部添加到v容器中,现在容器的长度为3,三个元素分别是1,2,3

下表方式访问vector元素


可以像数组一样使用下标访问vector中的元素

  1. #include<vector>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int> v;
  7. v.push_back(1);
  8. v.push_back(2);
  9. v.push_back(3);
  10. cout<<v[0]<<endl;
  11. v[1] = 10;
  12. cout<<v[1]<<endl;
  13. cout<<v[2]<<endl;
  14. return 0;
  15. }
程序输出:1 10 3

使用迭代器访问vector元素


常使用迭代器配合循环语句对vector对象进行遍历访问,迭代器的类型一定要与它要遍历的vector对象的元素类型一致。

  1. #include<vector>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int> v;
  7. v.push_back(1);
  8. v.push_back(2);
  9. v.push_back(3);
  10. vector<int>::iterator it;
  11. for(it=v.begin();it<v.end();it++)
  12. {
  13. cout<<*it<<endl;
  14. }
  15. return 0;
  16. }

元素的插入


insert()方法可以在vector对象的任意位置前插入一个新的元素,同时,vector自动扩张一个元素空间,插入位置后的所有元素依次向后挪动一个位置。
要注意的是:inert()方法要求插入的位置是元素的迭代器的位置,而不是元素的下标。
insert(iterator,value)函数有两个参数,第一个是迭代器的位置,第二个是插入的数据的值。

  1. #include<vector>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int> v;
  7. v.push_back(1);
  8. v.push_back(2);
  9. v.push_back(3);
  10. vector<int>::iterator it=v.begin();
  11. v.insert(v.begin(),8);
  12. v.insert(v.begin()+2,9);
  13. v.insert(v.end(),10);
  14. for(it=v.begin();it<v.end();it++)
  15. {
  16. cout<<*it<<endl;
  17. }
  18. return 0;
  19. }

输出结果是:8 1 9 2 3 10

向量的大小和元素的删除


erase()方法可以删除vector中迭代器所致的一个元素或者一段区间中的所有元素,如果带有一个参数,则删除对应迭代器位置的元素,如果对应的是两个参数,则删除的是第一个迭代器到第二个迭代器之间(包括第一个迭代器位置,不包括第二个迭代器位置)的元素,删除元素之后,后面的元素会提到前面去,将其覆盖。

clear()方法则一次性删除了vector中的所有的元素。

size()方法可以返回向量的大小,即元素的个数。

empty()方法可以返回向量是否为空(空则返回真,非空返回假)

  1. #include<vector>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. vector<int> v;
  7. for(int i=0;i<10;i++)
  8. {
  9. v.push_back(i);
  10. }
  11. cout<<"size:"<<v.size()<<endl;
  12. vector<int>::iterator it=v.begin();
  13. v.erase(it+1); //删除v[1]
  14. v.erase(it+4,it+7); //删除v[4]~v[5](!!注意此时的数组已经动态调整了)
  15. for(it=v.begin();it<v.end();it++)
  16. {
  17. cout<<*it<<" ";
  18. }
  19. cout<<"\nempty:"<<v.empty()<<endl;
  20. v.clear();
  21. cout<<"empty:"<<v.empty()<<endl;
  22. return 0;
  23. }

程序输出:
size:10
0 2 3 4 8 9
empty:0
empty:1

使用reverse反向排列算法

reverse反向排列算法,需要引入头文件algorithm。

  1. #include<vector>
  2. #include<algorithm>
  3. #include<iostream>
  4. using namespace std;
  5. int main()
  6. {
  7. vector<int> v;
  8. for(int i=0;i<10;i++)
  9. {
  10. v.push_back(i);
  11. }
  12. vector<int>::iterator it=v.begin();
  13. for(it=v.begin();it<v.end();it++)
  14. {
  15. cout<<*it<<" ";
  16. }
  17. cout<<endl;
  18. reverse(v.begin(),v.end());
  19. for(it=v.begin();it<v.end();it++)
  20. {
  21. cout<<*it<<" ";
  22. }
  23. return 0;
  24. }
输出结果:
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

使用sort算法对向量元素排序


使用sort算法对向量排序,也需要引入头文件algorithm。
sort算法要求使用随机访问迭代器进行排序,在默认情况下,对向量元素进行升序排列(当然可以认为进行改变)。

  1. #include<algorithm>
  2. #include<vector>
  3. #include<iostream>
  4. using namespace std;
  5. bool Comp(const double &a,const double &b)
  6. {
  7. return a>b;
  8. }
  9. int main()
  10. {
  11. vector<double> v;
  12. for(double i=2.0;i>1;i=i-0.1)
  13. {
  14. v.push_back(i);
  15. }
  16. sort(v.begin(),v.end());
  17. vector<double>::iterator it=v.begin();
  18. for(it=v.begin();it<v.end();it++)
  19. {
  20. cout<<*it<<" ";
  21. }
  22. cout<<endl;
  23. sort(v.begin(),v.end(),Comp);
  24. for(it=v.begin();it<v.end();it++)
  25. {
  26. cout<<*it<<" ";
  27. }
  28. return 0;
  29. }

输出结果:
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
2 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1




转载于:https://www.cnblogs.com/zhezh/p/3773304.html

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号