c++primer之顺序容器(访问元素)

本文详细介绍了C++标准库中顺序容器的front和back成员函数的使用方法,并讨论了如何安全地访问容器的第一个和最后一个元素。同时,文章还探讨了在访问容器元素时如何避免运行时错误,并给出了使用at成员函数确保下标访问安全性的建议。

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

  • 包括array在内的每个顺序容器都有一个front成员函数,而除forward_list之外的所有顺序容器都有一个back成员函数。这两个操作分别返回首元素和尾元素的引用
// 在解引用一个迭代器或者调用front或back之前检查是否有元素
if(!c.empty())
{
   // val和val2是c中第一个元素的拷贝
   // c.begin()返回的是地址,所以要加解引用操作符。
   // c.front()返回的是元素的引用
   auto val = *c.begin(),   val2 = c.front();
   // val3和val4是c中最后一个元素值的拷贝
   // c.end()返回的是尾元素之后的地址,所以地址减1以后,解引用才是尾元素的引用。
   auto last = c.end();
   auto val3 = *(--last);  // 不能递减forward_list迭代器
   auto val4 = c.back();   // forward_list不支持
}

访问成员函数返回的是引用: 在容器中访问元素的成员函数(即,front、back、下标、at)返回的都是引用。如果容器是一个const对象,则返回的是const引用。如果容器不是const的,则返回值是普通引用。

if(!c.empty())
{
     c.front() = 42;   //将42赋予c中的第一个元素
     auto &v = c.back();   //获取指向最后一个元素的引用
     v= 1024//改变c中的元素
     auto v2 = c.back();   //  v2不是一个引用,它是c.back()的一个拷贝
     v2 = 0;   //未改变c中的元素,要想改变c中元素的值,必须记得将变量定义成引用类型
}

下标操作和安全的随机访问

vector<string> svec;   //空vector
cout << svec[10];  //运行时错误:svec中没有元素!
// 如果我们希望确保下标是合法的,可以使用at成员函数。at成员函数类似下标运算符,但如果
// 下标越界,at会抛出一个out_of_range异常。
cout << svec.at(0);  //抛出一个out_of_range异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MachineLP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值