本文主要是介绍(P27)vector动态数组:vector介绍 ,vector对象初始化 ,vector常用成员函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1.vector介绍
- 2.vector对象初始化
- 3.vector常用成员函数
1.vector介绍
- 标准库的vector类型
(1)vector是同一种类型的对象的集合
(2)vector的数据结构很像数组(元素存储的元素是连续的,但是空间是可以扩展的),能非常高效和方便地访问单个元素
(3)vector是一个类模板(class template)
(4)要使用vector必须包含相关头文件
#include <vector>
using std::vector;
2.vector对象初始化
- vector类定义了好几种构造函数
vector<T>看成是一个类,T看成类型vector<T> v1;//vector保存类型为T的对象,默认构造函数v1为空vector<T> v2(v1);//v2是v1的一个副本,拷贝构造函数vector<T> v3(n,i);//v3包含n个值为i的元素,构造n个值为i的元素vector<T> v4(n);//v4含有值初始化的元素的n个副本,构造n个元素
3.vector常用成员函数
- 往向量添加一些数据
- eg1:P27\01.cpp
#include <iostream>
#include <vector>
using namespace std;//vector<int>是一个模板类,把它看成一个类
typedef vector<int> INTVEC;void ShowVec(const INTVEC& v)
{//size()返回向量元素的个数unsigned int i;for (i=0; i<v.size(); i++){cout<<" "<<v[i]<<" ";//向量可以看成一个数组,它重载了[]运算符}cout<<endl;
}
//string也可以看成是一种容器,通常看成字符串类而已,它可以通过迭代器来遍历容器
//vector是STL中的一种容器,容器都支持迭代器的操作,它可以通过迭代器来遍历容器
//迭代器可以看成是容器的指针,可以看成是泛型程序指针,如果存放的元素是int,vector<int> ,该泛型程序指针就等价于int*
//但是其他容器并不是这么简单的等价的,其他的迭代器可能是一个类
//用迭代器来实现
void ShowVec(INTVEC& v)
{INTVEC::iterator it;//这里的iterator,就当作int*//for (it = v.begin(); it < v.end(); ++it)也行,但是任何一种容器都会重载!=运算符,而<运算符不一定,所以下面的更好//前提:iterator是一个类的情况,为什么不用it++?,因为后置运算符++会多一次临时对象的构造,效率低一些,不理解看:23cpp\23cpp\23cpp\Integer.cppfor (it = v.begin(); it != v.end(); ++it){cout << *it<<"";}cout<<endl;
}//如果使用带const,则iterator应该也是const
void ShowVec(const INTVEC& v)
{INTVEC::const_iterator it;//这里*it不能赋值了,*it = 4;不正确,*it会成为只读的,不能赋值for (it = v.begin(); it != v.end(); ++it){cout << *it<<"";}cout<<endl;
}int main(void)
{//string等价于basic_string<char>,string也是一个类模板,是类模板的实例,也可以看成一个类INTVEC v;//给定一个向量v,打印出来里面有哪些元素v.push_back(1);v.push_back(2);v.push_back(3); ShowVec(v);// //size()返回向量元素的个数// unsigned int i;// for (i=0; i<v.size(); i++)// {// cout<<" "<<v[i]<<" ";//向量可以看成一个数组,它重载了[]运算符// }// cout<<endl;return 0;
}
- 测试:
- eg2:P27\02.cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;//vector<int>是一个模板类,把它看成一个类
typedef vector<int> INTVEC;// void ShowVec(const INTVEC& v)
// {
// //size()返回向量元素的个数
// unsigned int i;
// for (i=0; i<v.size(); i++)
// {
// cout<<" "<<v[i]<<" ";//向量可以看成一个数组,它重载了[]运算符
// }
// cout<<endl;
// }
// //string也可以看成是一种容器,通常看成字符串类而已,它可以通过迭代器来遍历容器
// //vector是STL中的一种容器,容器都支持迭代器的操作,它可以通过迭代器来遍历容器
// //迭代器可以看成是容器的指针,可以看成是泛型程序指针,如果存放的元素是int,vector<int> ,该泛型程序指针就等价于int*
// //但是其他容器并不是这么简单的等价的,其他的迭代器可能是一个类
// //用迭代器来实现
// void ShowVec(INTVEC& v)
// {
// INTVEC::iterator it;//这里的iterator,就当作int*// //for (it = v.begin(); it < v.end(); ++it)也行,但是任何一种容器都会重载!=运算符,而<运算符不一定,所以下面的更好
// //前提:iterator是一个类的情况,为什么不用it++?,因为后置运算符++会多一次临时对象的构造,效率低一些,不理解看:23cpp\23cpp\23cpp\Integer.cpp
// for (it = v.begin(); it != v.end(); ++it)
// {
// cout << *it<<"";
// }
// cout<<endl;
// }//如果使用带const,则iterator应该也是const
void ShowVec(const INTVEC& v)
{INTVEC::const_iterator it;//这里*it不能赋值了,*it = 4;不正确,*it会成为只读的,不能赋值for (it = v.begin(); it != v.end(); ++it){cout << *it<<"";}cout<<endl;
}int main(void)
{//string等价于basic_string<char>,string也是一个类模板,是类模板的实例,也可以看成一个类INTVEC v;//给定一个向量v,打印出来里面有哪些元素v.push_back(1);v.push_back(2);v.push_back(3); v.push_back(4);v.push_back(5);v.push_back(3); // cout<<v.back()<<endl;//输出最后一个元素,但是并不弹出// v.pop_back();//会将最后一个元素弹出来ShowVec(v);// v.erase(v.begin()+2);//v里面的参数是迭代器//凡是涉及到迭代器,其区间都是[,)闭开的// v.erase(v.begin(), v.begin() + 2);//移除值=3的元素,remove就是个算法,end()实际指向的是最后一个3后面的元素,因为是闭开区间//remove(v.begin(), v.end(), 3);只是把3挪到最后面了//方法1v.erase(remove(v.begin(), v.end(), 3), v.end());//方法2,删除值于给定的元素值的方法,其他容器删除给定元素值也可以采用这种方式INTVEC::iterator it;for(it=v.begin(); it!=v.end();){if(*it == 3){it = v.erase(it);//erase返回的是当前删除元素的下一个元素}else++it;}ShowVec(v);return 0;}
- 测试1:
//string等价于basic_string<char>,string也是一个类模板,是类模板的实例,也可以看成一个类INTVEC v;//给定一个向量v,打印出来里面有哪些元素v.push_back(1);v.push_back(2);v.push_back(3); cout<<v.back()<<endl;//输出最后一个元素,但是并不弹出v.pop_back();//会将最后一个元素弹出来ShowVec(v);
- 测试2:
//string等价于basic_string<char>,string也是一个类模板,是类模板的实例,也可以看成一个类INTVEC v;//给定一个向量v,打印出来里面有哪些元素v.push_back(1);v.push_back(2);v.push_back(3); v.push_back(4);v.push_back(5);// cout<<v.back()<<endl;//输出最后一个元素,但是并不弹出// v.pop_back();//会将最后一个元素弹出来ShowVec(v);v.erase(v.begin()+2);//v里面的参数是迭代器ShowVec(v);
- 测试3:
//string等价于basic_string<char>,string也是一个类模板,是类模板的实例,也可以看成一个类INTVEC v;//给定一个向量v,打印出来里面有哪些元素v.push_back(1);v.push_back(2);v.push_back(3); v.push_back(4);v.push_back(5);// cout<<v.back()<<endl;//输出最后一个元素,但是并不弹出// v.pop_back();//会将最后一个元素弹出来ShowVec(v);// v.erase(v.begin()+2);//v里面的参数是迭代器//凡是涉及到迭代器,其区间都是[,)的v.erase(v.begin(), v.begin() + 2);ShowVec(v);
-
测试4:
-
STL 六大组件:
容器,迭代器,算法,函数对象,适配器(还分为容器适配器,迭代器适配器,算法适配器),内存分配器 -
查找vector帮助手册的两种方式
(1)方法1
按下F1
(2)方法2
这篇关于(P27)vector动态数组:vector介绍 ,vector对象初始化 ,vector常用成员函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!