STL常用容器——vector容器的使用
1、vector容器概念
vector 容器是 STL中最常用的容器之一,它和数组非常类似,都可以看做是对 C++普通数组的“升级版”。
vector 实现的是一个动态数组,可以动态扩展,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间。
vector 在尾部插入或删除元素,时间复杂度为O(1) ;
而在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n) 。
2、vector容器构造方式
vector<T> v ; 采用模板实现类实现,默认构造函数
vector(v.begin() , v.end()) ; 将v[begin(),end())区间中的元素拷贝给本身
vector(n,elem) ; 构造函数将n个elem拷贝给本身
vector(const vector &vec) ; 拷贝构造函数
#include<iostream>
using namespace std;
#include<vector>
void printVector(vector<int>& vec) {
for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
printVector(v1);
vector<int> v2(v1.begin(), v1.end());
printVector(v2);
vector<int> v3(7, 7);
printVector(v3);
vector<int> v4(v3);
printVector(v4);
}
int main() {
test01();
system("pause");
return 0;
}
3、vector赋值操作
vector& operator=(const vector &vec); 重载等号操作符
assign(beg,end); 将[beg,end)区间中的数据拷贝赋值给本身
assign(n,elem); 将n个elem拷贝赋值给vector本身
#include<iostream>
using namespace std;
#include<vector>
void printVector(vector<int>& vec) {
for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
void test02() {
vector<int> v5;
for (int i = 0; i < 10; i++) {
v5.push_back(i);
}
printVector(v5);
vector<int> v6 = v5;
printVector(v6);
vector<int> v7;
v7.assign(v5.begin(), v5.end());
printVector(v7);
vector<int> v8;
v8.assign(7, 7);
printVector(v8);
}
int main() {
test02();
system("pause");
return 0;
}
4、vector容量(capacity)和大小(size)的区别
empty(); 判断容器是否为空
capacity(); 容器的容量
size(); 返回容器中元素的个数
resize(int num ); 重新指定容器的长度为num,若容器长度变长,则以原值填充;如果容器长度变短,则超出容器长度的末尾元素要被删除
resize(int num,elem); 重新指定容器的长度为num,若容器长度变长,则以elem值填充新位置;如果长度变短,则超出容器长度的末尾元素要被删除
#include<iostream>
using namespace std;
#include<vector>
void printVector(vector<int>& vec) {
for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
if (v1.empty()) {
cout << "v1为空" << endl;
}
else {
cout << "容器不为空" << endl;
cout << "容器的容量为:" << v1.capacity() << endl;
cout << "容器的大小为:" << v1.size() << endl;
}
v1.resize(15, 6);
printVector(v1);
v1.resize(3);
printVector(v1);
}
int main() {
test01();
system("pause");
return 0;
}
5、vector添加和删除
push_back(ele); 元素尾部添加元素ele
pop_back(); 删除最后一个元素
insert(const_iterator pos,ele); 在迭代器指向的位置pos添加元素ele
insert(const_iterator pos,int cout,els); 在迭代器指向的位置pos添加cout个元素ele
erase(const_iterator pos); 删除迭代器指向的元素
erase(const_iterator start,const_iterator end); 删除迭代器start到end之间的元素
clear(); 清除容器中所有元素
#include<iostream>
using namespace std;
#include<vector>
void printVector(vector<int>& vec) {
for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
v1.pop_back();
printVector(v1);
v1.insert(v1.begin(), -1);
printVector(v1);
v1.insert(v1.end(), 2, 11);
printVector(v1);
v1.erase(v1.begin());
printVector(v1);
v1.erase(v1.begin(), v1.end());
v1.clear();
printVector(v1);
}
int main() {
test01();
system("pause");
return 0;
}
6、vector数据存取
at(int idx); 返回容器索引idx所指的数据
operator[ int idx ]; 返回容器索引idx所指的数据
front(); 返回容器的第一个元素
back(); 返回容器的最后一个元素
#include<iostream>
using namespace std;
#include<vector>
void test01() {
vector<int> v1;
for (int i = 0; i < 10; i++) {
v1.push_back(i);
}
for (int i = 0; i < v1.size(); i++) {
cout << v1[i] << " ";
}
cout << endl;
for (int i = 0; i < v1.size(); i++) {
cout << v1.at(i) << " ";
}
cout << endl;
cout << "容器第一个元素为: " << v1.front() << endl;
cout << "容器最后一个元素为: " << v1.back() << endl;
}
int main() {
test01();
system("pause");
return 0;
}
vector容器互换和增加容器容量
swap():交换两个容器的所有元素
reserve():增加容器的容量
|