C++ vector获取最后一个元素的方法及相关疑问

文章介绍了C++中访问vector容器最后一个元素的多种方式,包括back()、通过.size()、使用迭代器的.end()-1以及.reverse_iterator.rbegin()。还提到误将变量名last重新定义导致的错误,并提出可以通过.end()[-1]来获取最后一个元素,以及.end()[-i]可以获取倒数第i个元素的新知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	vector<int> intV = { 1,2,3 };
	//返回元素
	//1、back()
	int last = intV.back();
	cout <<"last = "<< last << endl;

	//2、获取长度来访问最后一个单元
	int last_2 = intV[intV.size() - 1];
	cout <<"last_2 = "<< last_2 << endl;
	

	//返回迭代器
	//3、.end()-1
	vector<int>::iterator it = intV.end() - 1;
	cout <<"*it = " <<*it << endl;

	//4、.rbegin();
	vector<int>::reverse_iterator r_it = intV.rbegin();
	cout << "*r_it = "<<*r_it << endl;

这里第一个方法会出错,出错提示:
在这里插入图片描述
使用front()返回第一个元素试试啥结果:

int first = intV.front();
	cout << "frist = " << first << endl;

成功输出第一个元素:
在这里插入图片描述
为什么会这样?
分析back()和front()的源码:

//back()
 _NODISCARD _Ty& back() {
        auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
        _STL_VERIFY(_My_data._Myfirst != _My_data._Mylast, "back() called on empty vector");
#endif // _CONTAINER_DEBUG_LEVEL > 0

        return _My_data._Mylast[-1];
    }

//front()
 _NODISCARD _Ty& front() {
        auto& _My_data = _Mypair._Myval2;
#if _CONTAINER_DEBUG_LEVEL > 0
        _STL_VERIFY(_My_data._Myfirst != _My_data._Mylast, "front() called on empty vector");
#endif // _CONTAINER_DEBUG_LEVEL > 0

        return *_My_data._Myfirst;
    }

可以看到两个函数返回值都是值类型,分析到这儿,才发现原来是测试上上面已经定义过了last,
在这里插入图片描述
这句话造成了错误,引发了重定义,闹了乌龙。修改这个bug后就成功输出了。
但back()的这句源码return _My_data._Mylast[-1];也引发了我的思考,是否可以通过.end()[-1]来取得vector最后一个元素?试一下
在这里插入图片描述
答案是可以,因此方法又多了一种

//5、.end()[-1];
	int last_3 = intV.end()[-1];
	cout << "last_3 = " << last_3 << endl;

不仅如此,.end()[-i]可以返回倒数第i个元素,又是个新的知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值