STL---vector
分类:
IT文章
•
2025-02-06 15:40:07
#include<iostream>
#include<vector>
using namespace std;
struct STU
{
int a;
};
int main()
{
vector<int> vec1; //vector 中的结构可以是C C++所有的基础类型
vector<char> vec2; //这样相当于一个简化版的string类型
vector<STU> vec3; //也可以是自定义结构
//构造函数
vector<int> vec4(5);
for (int i = 0; i < 5; i++)
{
cout << vec4[i] << endl;//都是0
}
cout << "*************************************************
";
vector<int> vec5(5, 9);//用5个9来初始化这个vector
for (int i = 0; i < 5; i++)
{
cout << vec5[i] << endl;
}
cout << "*************************************************
";
vector<int> vec6(vec5);//用另一个vector来进行初始化
for (int i = 0; i < 5; i++)
{
cout << vec6[i] << endl;
}
cout << "*************************************************
";
vector<int>::iterator ite1 = vec6.begin();
vector<int>::iterator ite2 = vec6.end();
vector<int> vec7(ite1, ite2); //用迭代器进行初始化
for (int i = 0; i < 5; i++)
{
cout << vec7[i] << endl;
}
cout << "*************************************************
";
return 0;
}
View Code
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//Visual Studio2005定义对象的时候初始化几个,那么容量就是几,不同的编译器可能不一样
vector<int> vec1;
cout <<"vec1的容量:"<< vec1.capacity() << endl;
vector<int> vec2(5);
cout << "vec2的容量:" << vec2.capacity() << endl;
//容量不够时增加现有容量的一半。比如现有10个,新的就是15个,现有13个;增加13/2==6个,就是19个,不同的编译器可能导致结果不一样
vector<int> vec3(10);
vec3.push_back(9);
cout << "vec3的容量:" << vec3.capacity() << endl;
vector<int> vec4(13);
vec4.push_back(9);
cout << "vec4的容量:" << vec4.capacity() << endl;
cout << "*******************************************************8
";
vector<int> vec5(5);
vec5[3] = 9;
cout <<"vec5改变前的容量:"<< vec5.capacity() << endl;
vec5.reserve(10);
cout << "vec5改变后的容量:" << vec5.capacity() << endl;
//cout << vec5[5] << endl; //这条语句是错误的因为,vec5里面现在只有5个元素
//reserve() 方法可以改变vector的容量,但是不能改变vector里面元素的个数
cout <<"vec5内的元素的个数(使用resize前):"<< vec5.size() << endl;
vec5.resize(10); //这个方法可以改变vector数组的元素个数
cout << "vec5内的元素的个数(使用resize后):" << vec5.size();
//这个里面需要注意不要混淆capacity和size的含义
cout << endl;
cout << "*******************************************************8
";
//empty方法,size不为0就返回1,size为0就返回0
vector<int> vec6;
cout << vec6.empty() << endl;
vector<int> vec7(5);
cout << vec7.empty() << endl;
return 0;
}
View Code
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
void func(int n)
{
cout << n << " ";
}
int main()
{
vector<int> vec1;
for (int i = 0; i < 10; i++)
{
vec1.push_back(i);
}
cout << vec1.at(0) << endl;//at的用法
cout << vec1[1] << endl; //at和[]都是下标运算
cout << vec1.back() << endl;//返回最后一个元素
//使用迭代器进行循环遍历
vector<int>::iterator ite = vec1.begin();
for (; ite != vec1.end(); ite++)
{
cout << *ite << " ";
}
cout << endl;
//使用for_each进行循环遍历
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
//添加元素
vec1.push_back(10); //尾部添加
vec1.insert(vec1.begin()+2, 999); //中间插入元素
vector<int> vec2(5, 888);
vec1.insert(vec1.begin(), vec2.begin(), vec2.begin() + 3); //用另一个vector的进行插入
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
//删除元素
vec1.pop_back(); //删除尾部元素
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
vec1.erase(vec1.begin()); //使用erase方法删除一个指定元素
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
vec1.erase(vec1.begin(), vec1.begin() + 2); //使用erase方法删除一段指定元素
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
//交换
cout << "交换前的vec1:";
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
cout << "交换前的vec2:";
for_each(vec2.begin(), vec2.end(), func);
cout << endl;
vec2.swap(vec1);
cout << "交换后的vec1:";
for_each(vec1.begin(), vec1.end(), func);
cout << endl;
cout << "交换后的vec2:";
for_each(vec2.begin(), vec2.end(), func);
cout << endl;
//运算符的重载
cout << (vec1 > vec2) << endl; //比较的方法和字符串的比较是一样的,用的少,了解一下就好了
//排序算法
sort(vec2.begin(), vec2.end()); //也可以改变迭代器使得只是排序中间的一部份 默认从小到大排序
for_each(vec2.begin(), vec2.end(), func);
cout << endl;
sort(vec2.begin()+2, vec2.end(),greater<int>()); //加入第三个反函数参数就可以使得从小到大排序
for_each(vec2.begin(), vec2.end(), func);
cout << endl;
return 0;
}