如何做logo模板下载网站,局门户网站的建设,网页制作与设计元素是什么,免费单页网站在线制作一、标准库中的vector类
1.vector的介绍 1. vector是表示可变大小数组的序列容器 #xff0c; 和数组一样#xff0c;vector可采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问#xff0c;和数组一样高效。但是又不像数组#xff0c;它的大…一、标准库中的vector类
1.vector的介绍 1. vector是表示可变大小数组的序列容器 和数组一样vector可采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数组一样高效。但是又不像数组它的大小是可以动态改变的而且它的大小会被容器自动处理。 2. 本质讲vector使用动态分配数组来存储它的元素。当新元素插入时候这个数组需要被重新分配大小以增加存储空间。其做法是分配一个新的数组然后将全部元素移到这个数组。就时间而言这是一个代价相对来说高的任务因为每当一个新的元素加入到容器的时候vector并不会每次都重新分配大小。 3. vector分配空间策略vector会分配一些额外的空间以适应可能的增长因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何重新分配都应该是对数增长的间隔大小以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。 4. 因此vector占用了更多的存储空间为了获得管理存储空间的能力并且以一种有效的方式动态增长。 5. 与其它动态序列容器相比deque, list and forward_list vector在访问元素的时候更加高效在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作效率更低。比起list和forward_list统一的迭代器和引用更好 我们知道STL学习的三步能用明理能扩展因而我们的学习也是这个流程 2.vector的使用
记住学stl一定一定要学会看文档vector文档.vector在实际中非常的重要在实际中我们熟悉常 见的接口就可以。 2.1 常用的构造函数
vector(); vector类的默认构造函数构造一个没有元素的空容器 例如 void test()
{vectorint v;
} 都需要引用头文件vector vector(size_type n, const value_type val value_type()); 构造一个vector类对象并用n个val初始化 例如: void test()
{//vectorint v;vector int v(5, 0);for (auto i : v){cout i ;}
}
int main()
{test();return 0;
} 运行结果: void test()
{//vectorint v;vector int v(5, 2);for (auto i : v){cout i ;}
}
int main()
{test();return 0;
} 运行结果: 拷贝构造函数 vector(const vector x); 对于一个已有的vector容器进行拷贝,并生成一个新的容器 例如: void test()
{//vectorint v;vector int v1(5, 2);vector int v2(v1);for (auto i : v2){cout i ;}
} 运行结果:v 使用迭代器的初始化构造 Templateclass InputIteratorvector(InputIterator first, InputIterator last); 例如: void test()
{//vectorint v;vector int v1(5, 2);//vector int v2(v1);vector int v2(v1.begin(),v1.end()-1);for (auto i : v2){cout i ;}
} 运行结果v: 2.2 容量操作的接口 1.size size_type size() const; 获取有效元素的个数 例如: void test()
{//vectorint v;vector int v1(5, 2);//vector int v2(v1);/*vector int v2(v1.begin(),v1.end()-1);*///for (auto i : v2)//{// cout i ;//}cout v1.size();
}
int main()
{test();return 0;
} 运行结果: 2.capacity 获取容量大小 size_type capacity() const; 例如: void test()
{vector int v1(5, 2);cout v1.capacity();
} 运行结果: 3.empty 判断容器是否为空 bool empty() const; 例如:
void test()
{vector int v1(5, 2);vector int v2;cout v1.empty() endl;cout v2.empty() endl;
} 运行结果: 4.resize void resize (size_type n, value_type val value_type()); 将有效元素的个数修改为n并且如果n大于原来的size多出来的地方用val填充 如果没有给出val就用0填充 例如: void test()
{vector int v;cout v.size() endl;v.resize(20);cout v.size() endl;for (auto i : v){cout i ;}cout endl;v.resize(30);cout v.size() endl;for (auto i : v){cout i ;}cout endl;v.resize(10);cout v.size() endl;for (auto i : v){cout i ;}
} 运行结果: 5.max_size size_type max_size() const; 返回最大大小 例如: ps:这里push_back是尾插 void test1()
{vector int v;for (int i 0; i 100; i) v.push_back(i);cout v.size() endl;
}运行结果: 6.reserve void reserve (size_type n); 改变容量大小 例如: void test1()
{vector int v;cout v.capacity() endl;v.reserve(10);cout v.capacity() endl;
} 运行结果: 2.3vector的访问及其遍历 1.operator[] reference operator[] (size_type n);
const_reference operator[] (size_type n) const; 用下标直接访问 例如: void test()
{vector int v(5,2);cout v[2] endl;
} 运行结果: 因此我们也可以通过下标去遍历,这里就不多作演示 2.迭代器 这里大体和string类差不多 iterator begin();const_iterator begin() const;iterator end();const_iterator end() const; 迭代器用于获取容器中第一个元素的位置和最后一个元素的下一个位置 例如:
void test()
{vector int v { 1,2,3,4,5,67,8,9,0,1 };vectorint::iterator it v.begin();while (it ! v.end()){cout *it ;it;}
} 运行结果: 3.反向迭代器 这个整体和迭代器差不多 reverse_iterator rbegin();const_reverse_iterator rbegin() const;reverse_iterator rend();const_reverse_iterator rend() const; rbegin获取容器中最后一个元素的位置rend获取容器中的第一个元素的前一个位置 例如:
void test()
{vector int v { 1,2,3,4,5,67,8,9,0,1 };vectorint::reverse_iterator rit v.rbegin();while (rit ! v.rend()){cout *rit ;rit;}
} 运行结果: 4.at reference at (size_type n);
const_reference at (size_type n) const; 返回容器中位置n处的元素的引用 例如: void test()
{vector int v { 1,2,3,4,5,67,8,9,0,1 };cout v.at(5) endl;for (size_t i0;iv.size();i){cout v.at(i) ;}
} 运行结果: 5.back reference back();
const_reference back() const; 返回容器中最后一个元素的引用 例如: void test()
{vector int v { 1,2,3,4,5,67,8,9,0,123 };cout v.back() endl;
} 运行结果: 6.front reference front();
const_reference front() const; 返回容器中第一个元素的引用 例如: void test()
{vector int v { 1,2,3,4,5,67,8,9,0,123 };cout v.front() endl;
} 运行结果: 2.4vector的增删查改 1.push_back(); void push_back(const value_type val); 从容器尾部插入一个元素 例如 void test()
{vector int v { 1,2,3,4,5,67,8,9,0,123 };cout v.back() endl;v.push_back(99999);cout v.back() endl;
} 运行结果: 2.pop_back() void test()
{vector int v { 1,2,3,4,5,67,8,9,0,123 };cout v.back() endl;v.pop_back();cout v.back() endl;
} 运行结果: 3.find() template class InputIterator, class TInputIterator find(InputIterator first, InputIterator last, const T val); 在两个迭代器区间寻找val并返回其所在处的迭代器 例如 void test2()
{vectorint v { 1,2,3,4,5,6 };for (auto i : v){cout i ;}cout endl;vectorint::iterator it find(v.begin(), v.end(), 3);*it 30;for (auto i : v){cout i ;}cout endl;
} 需要注意的是该函数并非vector的成员函数是标准库中的函数多个容器共用该find函数 4.insert() iterator insert (iterator position, const value_type val);
void insert (iterator position, size_type n, const value_type val);template class InputIterator
void insert (iterator position, InputIterator first, InputIterator last);在position位置插入元素 例如 void test2()
{vectorint v { 1,2,3,4,5,6 };for (auto i : v){cout i ;}cout endl;vectorint::iterator it find(v.begin(), v.end(), 3);v.insert(it, 99999);for (auto i : v){cout i ;}cout endl;
} 运行结果: 5.earse() iterator erase (iterator position);
iterator erase (iterator first, iterator last); 删除position位置的元素或者 [firstlast) 区间的所有元素 例如 void test2()
{vectorint v { 1,2,3,4,5,6 };for (auto i : v){cout i ;}cout endl;vectorint::iterator it find(v.begin(), v.end(), 3);v.erase(it);for (auto i : v){cout i ;}cout endl;
} 运行结果: 6.swap() void swap (vector x); 交换两个vector的数据空间 例如 void test3()
{vectorint v1 { 1,2,3,4,5,6,7,8,9,0 };vectorint v2 { 0,9,8,7,6,5,4,3,2,1 };v1.swap(v2);for (auto i : v1){cout i ;}cout endl;
} 运行结果: 7.assign() template class InputIterator void assign (InputIterator first, InputIterator last);
void assign (size_type n, const value_type val); 为vector指定新内容替换其当前内容并修改size 例如 void test2()
{vectorint v { 1,2,3,4,5,6 };for (auto i : v){cout i ;}cout endl;v.assign(5, 4);for (auto i : v){cout i ;}cout endl;
} 运行结果: 8.clear() void clear(); 从vector中删除所有元素不改变容量大小 例如 void test2()
{vectorint v { 1,2,3,4,5,6 };for (auto i : v){cout i ;}cout size: v.size();cout endl;v.clear();for (auto i : v){cout i ;}cout size: v.size();cout endl;
}运行结果: 本篇是对vector的初步理解,我们只需知道会用即可 如有错误,欢迎大家在评论区指出。