STL array的at方法(2)

原文地址:http://www.cplusplus.com/reference/array/array/at/

public member function
<array>

std::array::at

      reference at ( size_type n );
const_reference at ( size_type n ) const;
Access element
Returns a reference to the element at position n in the array.
返回一个指向位置为n的元素的引用。

The function automatically checks whether n is within the bounds of valid elements in the container, throwing an out_of_range exception if it is not (i.e., if n is greater or equal than its size). This is in contrast with member operator[], that does not check against bounds.
该方法会自动检测n在该array中是否是一个有效的值,当n大于或者等于它的size的时候,将会抛出out_of_range异常,这和成员方法operato[]是一个对比,因为operator[]不会检测n的范围。例子:
<span style="font-size:18px;">#include <array>
#include <iostream>
using namespace std;
void at(){
    array<int,5> ai{1,2,3,4,5};
    cout<<"ai is ";
    for(int &i:ai)
        cout<<i<<" ";
    cout<<endl;
    cout<<"ai.at(3)="<<ai.at(3)<<endl;
    cout<<"ai.at(10)="<<ai.at(10)<<endl;
}
</span>
运行截图:


Parameters

n
Position of an element in the array.
If this is greater than or equal to the array size, an exception of type out_of_range is thrown.
Notice that the first element has a position of 0 (not 1).
Member type size_type is an alias of the unsigned integral type size_t.
n为元素在array中的位置。

如果n大于或者等于array的大小,将抛出out_of_range异常。

注意第一个元素的位置是0.

size_type是一个无符号整型。

Return value

The element at the specified position in the array.
返回array中一个在特定位置的元素。

If the array object is const-qualified, the function returns a const_reference. Otherwise, it returns a reference.如果array对象是const属性的,那么返回一个const_reference,否则,返回一个reference。

Member types reference and const_reference are the reference types to the elements of the array (see array member types).

reference以及constreference都是指向元素类型的引用。


Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// array::at
#include <iostream>
#include <array>

int main ()
{
  std::array<int,10> myarray;

  // assign some values:
  for (int i=0; i<10; i++) myarray.at(i) = i+1;

  // print content:
  std::cout << "myarray contains:";
  for (int i=0; i<10; i++)
    std::cout << ' ' << myarray.at(i);
  std::cout << '\n';

  return 0;
}


Output:
myarray contains: 1 2 3 4 5 6 7 8 9 10

Complexity

Constant.

Iterator validity

No changes.

Data races

The reference returned can be used to access or modify elements. Concurrently accessing or modifying different elements is safe.

返回的引用可以用来访问以及修改元素,并且这些操作都是安全的。

例子:

<span style="font-size:18px;"><span style="color:#cc33cc;">void at2(){
    array<int,5> ai{1,2,3,4,5};
    cout<<"ai is ";
    for(int &i:ai)
        cout<<i<<" ";
    cout<<endl;
    int &r=ai.at(3);
    cout<<"ai.at(3)="<<r<<endl;
    </span><span style="color:#ff0000;">r=15;</span><span style="color:#cc33cc;">
     cout<<"after alter ai is ";
    for(int &i:ai)
        cout<<i<<" ";
    cout<<endl;

}</span></span>
运行截图:




Exception safety

Strong guarantee: if an exception is thrown, there are no changes in the container.
It throws out_of_range if n is out of bounds.
如果抛出异常,对容器无影响。
如果n超出范围,抛出out_of_range异常。
例子:
<span style="font-size:18px;">#include <array>
#include <iostream>
using namespace std;
void at(){
    array<int,5> ai{1,2,3,4,5};
    cout<<"ai is ";
    for(int &i:ai)
        cout<<i<<" ";
    cout<<endl;
    cout<<"ai.at(3)="<<ai.at(3)<<endl;
    try{
    cout<<"ai.at(10)="<<ai.at(10)<<endl;
    }catch(out_of_range)
    {
        cout<<"catch a out_of_range exceptions"<<endl;
         cout<<"ai is ";
        for(int &i:ai)
            cout<<i<<" ";
        cout<<endl;
    }

}</span>
运行结果:



——————————————————————————————————————————————————————————————————

//翻译的不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双

2014-8-26

于GDUT


——————————————————————————————————————————————————————————————————




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值