对Vector进行了认识,那么就要好好来学习它的代码,然后读懂后就要自己在代码编译环境中进行敲击:
#include<iostream>
using namespace std;
#include<vector>
#include <algorithm>
#if 1
void VectorTest()
{
vector<int> vec;
int count = 0;
for (int i = 0; i < 1000000; ++i)
{
vec.push_back(1);
int size = vec.size();
int capacity = vec.capacity();
if (size == capacity)
{
cout << size << "\t" << capacity << endl;
count++;
}
}
cout << count << endl;
}
int main()
{
vector<int> vec1; //声明一个int向量
vector<int> vec2(7); //声明一个初识大小为7的int向量
vector<int> vec3(5, 2); //声明一个初识大小为5且值都是2的int向量
vector<int> vec4(vec3); //用vec3构造
int arr[] = { 1, 2, 3, 4, 5 };
vector<int> vec5(arr, arr + 5);
vector<int> vec6(&arr[1], &arr[4]);//将arr[1]--arr[4]范围元素作为vec6初始值,不包含arr[4]
vector<string>vec7;
vec1.push_back(10);
vec1.push_back(20);
vec1.push_back(30);//末尾添加元素
vec1.pop_back();//末尾删除元素
cout << *vec1.begin() << endl;//开始迭代器
cout << *(vec1.end() - 1) << endl;//末尾迭代器 指向最后一个元素的下一个位置
vec1[1] = 90;//下标访问 不检查是否越界
vec1.at(0) = 80; //at方法访问 检查是否越界 越界抛出out_of_range
vec1.cbegin(), vec1.cend();//const迭代器
cout << vec1.front() << endl;//访问第一个元素 并不检查是否存在
cout << vec1.back() << endl;//访问最后一个元素 并不检查是否存在
int* p = vec1.data(); //返回指针指向数组 C++11
vec1.clear();//清空向量
for (int i = 0; i < 10; ++i)
{
vec1.push_back(i);
}
cout << "遍历输出:";
//vector<int>::iterator it;
for (auto it = vec1.begin(); it != vec1.end(); ++it)
{
cout << *it << " ";
}
cout << endl;
cout << "元素个数:" << vec1.size() << endl;
cout << "翻转后:";
reverse(vec1.begin(), vec1.end());
for (auto i : vec1) //C++11
{
cout << i << " ";
}
cout << endl;
cout << "排序后:";
sort(vec1.begin(), vec1.end());//排序 头文件#include <algorithm>
for (auto i : vec1) //C++11
{
cout << i << " ";
}
cout << endl;
vec1.swap(vec2); //交换
cout << "交换后:";
sort(vec1.begin(), vec1.end());//排序 头文件#include <algorithm>
for (auto i : vec1) //C++11
{
cout << i << " ";
}
cout << endl;
bool bEmpty = vec1.empty();
vec3.reserve(10);//向量最大存储长度
vec3.reserve(3);
vec3.assign(10, 4);
VectorTest();//每次新增当前空间的1/2
return 0;
}
#endif //vector