上一节我们具体了解了vector容器的迭代器及其使用方法,本节主要详细介绍各种访问vector内元素的方法,vector容器的访问方式和array非常像,可以跳转至《如何访问array容器内的元素?》将array和vector的访问方式类比起来学习,但是有一点需要牢牢记住,vector可不能通过get()函数模板进行访问!。这里也会详细讲解vector内元素的访问方式,因为学习既需要触类旁通,也需要重复训练。以下是几种访问vector内元素的方法:

和普通数组、array一样,vector重载了'[]'运算符,我们可以通过'[]'访问vector内的元素:

#include<bits/stdc++.h>
/* 如何访问vector容器内元素 */
using namespace std;
/*方法1:由于'[]'运算符重载实现下标访问*/
void test()
{
vector<int> v{1,2,3,4,5};
for(int i=0;i<5;++i) 
{
cout << v[i]  << " ";
}
cout << '\n';
} 
int main(){
    test();
    return 0;
}

vector容器提供了at()这个成员函数进行元素访问,由于at函数内的参数是元素下标,范围是[0-vector.size()-1],所以这里千万注意不要访问越界!

cout << v.at(i)  << " "; //通过at()成员函数进行元素访问 参数是元素下标

众所周知'[]'(因为它没有进行索引检查)访问速度非常快,既然可以通过'[]'访问元素了那么为什么会出现at这个成员函数呢?原因很简单,通过'[]'访问,如果数组越界,会造成程序崩溃,而你不知道是哪里问题,需要逐一排查。而我们的at()会提示你错误原因,比如此时我访问一个arr里面没有的元素:

cout << v.at(100)<<'\n';

会出现这么一个报错:

terminate called after throwing an instance of 'std::out_of_range'

  what():  vector::_M_range_check: __n (which is 100) >= this->size() (which is 5)

它的意思是只有5个元素,而你却向访问第100个元素,简直是痴心妄想。

c++提供了get<n>这个函数模板进行元素访问,访问且只能访问编译时确定大小的容器,由于vector是动态数组,所以这里不能使用vector进行元素访问!(划重点)

既然学STL,那就记得迭代器吧,想起迭代器,你就要有“迭代器使用类似指针”这个印象,指针?没想到吧,vector容器有一个成员函数data()维护指向首元素的指针,那我们分别通过迭代器和指针访问第5个元素:

#include<bits/stdc++.h>
/* 如何访问vector容器内元素 */
using namespace std;
/*c++中get()函数模板进行元素访问*/
void test()
{
   vector<int> v{1,2,3,4,5};
/*迭代器访问第5个元素*/
vector<int>::iterator it = v.begin() ;
for(int i=0;i<4;++i)it++;
cout << *it << '\n';
/*data()指针访问*/
int * p = v.data() ;
for(int i=0;i<4;++i)++p;
cout <<*p<<  '\n';
p=nullptr;
} 
int main(){
    test();
    return 0;
}

当然,如果只需要访问首尾位元素,back()和front()足矣:

cout << "首位元素是"  << v.front() << '\n';
cout << "尾位元素是"  << v.back() << '\n';

总结:共计4种方式访问vector容器内的元素,分别是'[]'、迭代器、指针和at()成员函数,单独访问首尾元素,back()和front()需要铭记于心。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)