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; // 默认是0cout << "v.capacity() = " << v.capacity() << endl; // 默认是0cout << "-------------------" << 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;
}