c++之vector容器遍历方式
一、简介
vector是定义在C++标准模板库。vector可以理解为是一个能够存放任意类型的动态数组,能够增加和删除元素,但是一个容器中的对象必须是同一种类型。
和数组的相似点:
1、vector为它们的元素使用连续的存储位置,也就意味着可以通过指针的偏移量来进行访问某一个元素。
2、与其他动态序列容器(队列、链表)相比,向量访问其元素(就像数组一样)非常高效,并且从末尾添加或删除元素的效率相对较高。但对于涉及在末尾以外的位置插入或删除元素的操作,vector的性能相对较差
不同点:
1、由于vector能够自动的管理内存,我们不需要考虑内存的增长和释放、具有很好的安全性。
注意:vector实际所占空间并不一定等于存储有效元素的空间。因为重新分配空间需要一定的时间,考虑到运行效率,设计人员并不是在每次添加或者删除元素都重新分配,而是会分配一些额外的存储空间以适应可能的增长。
二、声明和初始化
声明:
#include<vector> using std::vector;
初始化
vector<T> v1; vevtor保存类型为T的对象。默认构造函数v1为空。 vector<T> v2(v1); v2是v1的一个副本,v1和v2的元素类型必须相同 vector<T> v3(n,i); v3包含n个值为i的元素 vector<T> v4(n); v4包含初始化的元素的n个副本,默认元素值为0
案例1:
#include <vector>
#include <iostream>
int main() {
// 创建一个空的 vector
std::vector<int> myVector;
// 创建一个带有初始值的 vector
std::vector<int> myVector2 = {1, 2, 3, 4, 5};
// 创建一个包含 n 个元素,每个元素都初始化为特定值的 vector
std::vector<int> myVector3(5, 10); // 5 个元素,每个元素的值都是 10
return 0;
}
三 、vector遍历
1.迭代器遍历
for(vector<int>::iterator it=obj.begin();it !=obj.end();it++)
{
cout<<*it<<",";
}
2.C++11 新增关键字auto
for(auto it=obj.begin();it!=obj.end();it++)
{
cout<<*it<<",";
}
3.数组遍历
for(int i=0;i<obj.size();i++)
{
cout<<iter<<",";
}
4.基于范围的for循环
for(auto iter:obj)
{
cout<<iter<<",";
}
案例2:
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
// 获取 vector 的大小
std::cout << "Size of vector: " << myVector.size() << std::endl;
// 使用循环遍历 vector
for (int i = 0; i < myVector.size(); ++i) {
std::cout << myVector[i] << " ";
}
std::cout << std::endl;
// 使用范围循环遍历 vector(C++11)
for (const auto& element : myVector) {
std::cout << element << " ";
}
std::cout << std::endl;
return 0;
}
四、添加、删除和索引元素
push_back(value); //在最后面添加一个元素
pop_back(value); //将最后面的元素删除,不会返回元素的值
value[n]; //下标访问法,0~n~size-1
value.at[n]; //下标访问法,0~n~size-1,使用at访问更加安全一些,因为at访问的时候将在运行期间检查非法的索引,这种检查的代价是运行时间更长
value.front(); //返回最前面的一个元素
value.back(); //返回最后面的一个元素
案例3:
#include <vector>
#include <iostream>
int main() {
std::vector<int> myVector = {1, 2, 3, 4, 5};
// 在尾部插入元素
myVector.push_back(6);
// 在尾部删除元素
myVector.pop_back();
// 在指定位置插入元素
myVector.insert(myVector.begin() + 2, 10);
// 在指定位置删除元素
myVector.erase(myVector.begin() + 1);
return 0;
}
四、其他常用操作
v.empty(); //如果v为空,则返回true,否则返回false
v.size(); //返回v中元素的个数v.swap(v1) //交换容器
v.sort() //排序容器
案例4:
#include <vector>
#include <algorithm>
#include <iostream>
int main() {
std::vector<int> myVector = {3, 1, 4, 1, 5, 9, 2, 6};
// 对容器中的元素进行排序(默认升序)
std::sort(myVector.begin(), myVector.end());
// 输出排序后的容器内容
for (const auto& element : myVector) {
std::cout << element << " ";
}
std::cout << std::endl;
return 0;
}
参考链接:
更多推荐
所有评论(0)