1. vector 构造函数
功能描述:
vector 构造函数
函数原型
vector v; // 默认构造函数
vector(n, elem); // 将n个elem拷贝给本身
vector(const vector& v); // 拷贝构造函数
vector(v.begin(), v.end()); // 将v[begin(), end())区间中的元素拷贝给本身
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void printVector(vector<int> &v) {
for(vector<int>::iterator it = v.begin(); it != v.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);
// n个elem方式构造
vector<int> v3(10, 100);
printVector(v3);
// 拷贝构造函数
vector<int> v4(v3);
printVector(v4);
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}
2. vector 赋值操作
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// vector 赋值操作
// 函数原型:
// vector& operator=(const vector& x); // 重载等号操作
// assign(const_iterator first, const_iterator last); // 将区间[first, last)赋值给本身
// assign(n, elem) // 将n个elem拷贝赋值给本身
void printVector(vector<int> &v) {
for(vector<int>::iterator it = v.begin(); it != v.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;
v2 = v1;
printVector(v2);
// 区间赋值
v2.assign(v1.begin(), v1.end() - 5);
printVector(v2);
vector<int> v3;
v3.assign(v2.begin(), v2.end() - 2);
printVector(v3);
// n赋值
v3.assign(10, 100);
printVector(v3);
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}
3 vector 容量和大小
函数原型:
emty(); // 判断容器是否为空
capacity(); // 容器的容量
size(); // 容器中存放数据的个数
resize(int num); // 重新指定容器的长度,如果指定的长度比原来长,则以默认值填充新位置。如果指定的长度比原来短,则末尾超出容器长度的元素被删除。
resize(int num, int val); // 重新指定容器的长度,如果指定的长度比原来长,则以指定的值填充新位置。如果指定的长度比原来短,则末尾超出容器长度的元素被删除。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void printVector(vector<int> &v) {
for(vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
void isEmpty(vector<int> &v) {
if (v.empty())
{
cout << "v is empty" << endl;
}
else{
cout << "v is not empty" << endl;
}
}
void test01() {
vector <int> v;
isEmpty(v);
cout << "v.size() = " << v.size() << endl; // 默认是0
cout << "v.capacity() = " << v.capacity() << endl; // 默认是0
cout << "-------------------" << endl;
// 添加数据
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
printVector(v);
isEmpty(v);
cout << "v.size() = " << v.size() << endl; //
cout << "v.capacity() = " << v.capacity() << endl; //
cout << "-------------------" << endl;
// 重新指定容器的长度
v.resize(15,100);
printVector(v); // 如果指定的长度比原来长,则以指定的值填充新位置。
cout << "v.size() = " << v.size() << endl; // 存放的数据变多
cout << "v.capacity() = " << v.capacity() << endl; // 容器大小不变
cout << "-------------------" << endl;
// 重新指定短了
v.resize(5);
printVector(v); // 如果指定的长度比原来短,则末尾超出容器长度的元素被删除。
cout << "v.size() = " << v.size() << endl; // 存放的数据变少
cout << "v.capacity() = " << v.capacity() << endl; // 容器大小不变
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}
4. vector 插入和删除
函数原型
push_back(const T& x); // 在容器尾部添加元素
pop_back(); // 删除容器最后一个元素
insert(const_iterator pos, const T& x); // 在pos位置插入元素x
insert(const_iterator pos, const T& x, int n); // 在pos位置插入n个元素x
erase(const_iterator pos); // 删除pos位置的元素
erase(const_iterator start, const_iterator end); // 删除从start到end的元素
clear(); // 删除容器中所有元素
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void printVector(vector<int> &v){
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
cout << endl;
}
void test01() {
vector<int> v;
// 尾插
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
printVector(v);
// 尾删
v.pop_back();
printVector(v);
// 插入 第一个参数是迭代器,第二个参数是插入的元素
v.insert(v.begin(), 100); // 在头部插入
printVector(v);
// 插入 n 个元素
v.insert(v.begin(), 2, 1000);
printVector(v);
// 删除
v.erase(v.begin());
printVector(v);
// 删除区间
v.erase(v.begin(), v.begin() + 2);
printVector(v);
// 清空
cout << "clear" << endl;
v.clear();
printVector(v);
cout << "size: " << v.size() << endl;
cout << "capacity: " << v.capacity() << endl;
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}
5 vector 数据存取
函数原型
at(int pos) // 返回索引为pos的数据
operator[](int pos) // 返回索引为pos的数据
front() // 返回容器中第一个数据元素
back() // 返回容器中最后一个数据元素
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// vector 数据存取
void test01() {
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
// at()
for(int i = 0; i < v.size(); i++) {
cout << v.at(i) << " ";
}
cout << endl;
// operator[]
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl;
cout << "front: " << v.front() << endl;
cout << "back: " << v.back() << endl;
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}
6. vector 互换容器
// 函数原型
swap(vec); // 交换两个容器的所有元素
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// vector 互换容器
void printVec(vector<int> &v) {
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
cout << endl;
}
// 基本使用
void test01() {
vector<int> v1;
cout << "交换前" << endl;
for (size_t i = 0; i < 5; i++)
{
v1.push_back(i);
}
printVec(v1);
vector<int> v2;
for (size_t i = 10; i > 0; i--)
{
v2.push_back(i);
}
printVec(v2);
cout << "交换后" << endl;
v1.swap(v2);
printVec(v1);
printVec(v2);
}
// 实际用途
// 巧用swap可以收缩内存空间
void test02() {
vector<int> v;
for(int i = 0; i < 100000; i++) {
v.push_back(i);
}
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
v.resize(3);
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
// 收缩内存空间
vector<int>(v).swap(v); // 匿名对象 当前行执行完毕,立即释放匿名对象
cout << "v的容量为:" << v.capacity() << endl;
cout << "v的大小为:" << v.size() << endl;
}
int main(int argc, char const *argv[]) {
test02();
return 0;
}
7 vector 预留空间
功能描述:减少vector 在动态扩展容量时的扩展次数
函数原型
resever(int len) // 预留len个长度,不初始化元素,不可访问
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// vector 预留空间
void printVec(vector<int> &v) {
for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
cout << *it << " ";
}
cout << endl;
}
void test01() {
vector<int> v;
// v.reserve(100000); // 预留100000个空间,不初始化元素,不可访问
int num = 0; // 统计vector扩容的次数
int *p = NULL;
for (int i = 0; i < 100000; i++)
{
v.push_back(i);
if(p != &v[0]){
p = &v[0];
num++;
cout << "capacity = " << v.capacity() << endl;
cout << "size = " << v.size() << endl;
}
}
cout << "num = " << num << endl
}
int main(int argc, char const *argv[]) {
test01();
return 0;
}