优秀的电商设计网站有哪些内容,互联网推广营销隐迅推我选,昌做网站,管理培训网站建设向量容器Vector1. 定义/初始化2. 遍历3. 常用操作vector 迭代器遍历#xff0c;sort, reverse,1. 定义/初始化
vector是同一类型对象的集合#xff0c;被称作容器。vector实际是一个类模版#xff0c;可用于保存多种数据类型的数据#xff08;确定类型的vector 就只能装同…
向量容器Vector1. 定义/初始化2. 遍历3. 常用操作vector 迭代器遍历sort, reverse,1. 定义/初始化
vector是同一类型对象的集合被称作容器。vector实际是一个类模版可用于保存多种数据类型的数据确定类型的vector 就只能装同种数据。模版类决定了vector 声明时需要提供的信息。⚠️Vector 不是一种数据类型但是vectorint\text{vectorint}vectorint、vectorstring\text{vectorstring}vectorstring,… 都是数据类型。
Vector Vs 数组
动态数组可以在运行阶段设置长度具有数组的快速索引方式可以插入和删除元素
定义和初始化- -尖角号范型编程
# include vector
using std::vector
vectorT v1; // vector 保存了类型为T的对象 默认构造函数v1 为空
vectorT v2(v1); // v2 是 v1 的一个副本 拷贝构造函数两个是一个地址
vectorT v3(n, i); // v3 包含n个为i 的元素
vectorT v4(v); // v4 含有值初始化的元素的n个元素具体初始化值由T的默认构造函数决定vector double vec1;
vector string vec2(5); //分配5个空间, 使用默认值初始化
vector int vec3(5,998); //分配5个空间使用998初始化
vectorint primes {2, 3, 5, 7, 11, 13, 17, 19}; // 创建的同时指定初始值以及元素个数2. 遍历
vectorint cards(54, 0);// way1--C 语言的习惯: 传统for 循环
for(int i 0; i cards.size(); i){cout cards[i] \t;
}
cout \n endl;// way2--C语言习惯迭代器的写法
for(vectorint::const_iterator iter cards.begin(); iter ! cards.end(); iter){cout *iter , ;
}
cout endl; */// way3--C11 之后迭代器的简写版本类型推断
for(auto iter cards.begin(); iter ! cards.end(); iter){cout *iter 。 ;}cout endl;// way4--区间遍历
for(auto card : cards){cout card : getColor(card) - getValue(card) \t;
}
cout endl;// 使用算法的方式将容器的内容复制到cout 绑定的迭代器中
// #include iterator
// copy(cards.cbegin(), cards.cend(), ostream_iteratorint(cout, - ));
// cout endl;
3. 常用操作
vector常有的操作
常用操作clear()移除容器中的所有数据empty()判断容器是否为空size()返回容器中元素的个数[index],at(index)返回索引为index的元素erase(pos)删除pos 位置处的数据erase(beg, end)删除[beg, end) 区间的数据front()返回第一个元素insert(pos, elem)在pos位置插入一个元素pop_back()删除最后一个元素push_back(elem)在容器的末尾插入一个元素resize(num)重新设置一个容器的大小begin(),end()返回容器首尾元素的迭代器
新增两个头文件
#include vector
#include algorithmvector 迭代器遍历sort, reverse,
int main(){// vector double vectDouble {98.5, 67.9, 43.6, 32.9}; c 98 中不能初始化并赋初值vector double vectDouble;// 向数组中插入数字vectDouble.push_back(100.8);vectDouble.push_back(99.8);vectDouble.push_back(102.5);// 不专业输出for(int i 0; i vectDouble.size(); i){cout vectDouble[i] \t;}// 集合的通用遍历方法使用迭代器 iteratorvectordouble::iterator it; //定义一个vectordouble类型的迭代器, 实际上是一个指针for(it vectDouble.begin(); it ! vectDouble.end(); it){cout *it \t;}// 排序sort(vectDouble.begin(), vectDouble.end());for(it vectDouble.begin(); it ! vectDouble.end(); it){cout *it \t;}//逆序reverse(vectDouble.begin(), vectDouble.end());for(it vectDouble.begin(); it ! vectDouble.end(); it){cout *it \t;}return 0;
}定义多大多大push_back会/可以改变容量但是效率不高。 当内存容量不够的时候的应对机制申请一块更大的存储区将所有的元素放入到新的存储区中。将旧的内存释放掉。 建议vector中不要放复杂对象要放指针。这么处理的妙处