C++ vector::at() 函数



C++ vector::at() 函数提供对位于指定索引处的元素的引用。如果位置或索引号超出范围且不在向量中,则 at() 函数会抛出超出范围异常。at() 函数的时间复杂度是常数。

在 C++ 中,向量是表示数组的顺序容器,可以在运行时改变其大小。它们像数组一样有效地使用连续的存储位置来存储其元素,因此也可以使用其元素的常规指针上的偏移量来访问其元素。

语法

以下是 C++ vector::at() 函数的语法:

reference at (size_type n);const_reference at (size_type n) const;

参数

n − 表示容器中元素的位置。如果大于或等于向量的size,则抛出异常。

示例 1

让我们考虑以下示例,我们将使用 at() 函数并检索输出。

#include<iostream>
#include<vector>
using namespace std;

int main(){
   vector<int> tutorial{11,22,33,44};
   for(int i=1; i<tutorial.size(); i++)
      cout<<tutorial.at(i);
   return 0;
}

输出

当我们编译并运行上述程序时,将产生以下结果:

223344

示例 2

在以下示例中,我们将读取向量中的所有元素。

#include<iostream>
#include<vector>
using namespace std;

int main(){
   vector tutorial = {"TutorialsPoint","TP","Tutorix"};
   for(int i=0; i<tutorial.size(); i++){
      cout<< tutorial.at(i) << "\n";
   }
   cout<< "\n";
   return 0;
}

输出

运行上述程序后,将产生以下结果:

TutorialsPoint
TP
Tutorix

示例 3

考虑以下示例,我们将计算向量值的差值。

#include <iostream>
#include <vector>
using namespace std;

int main (){
   vector<int>tutorial {2,4,6,8,1,3,5,7};
   int sub = 0;
   cout<< "Values:\n";
   for (int i=0; i<tutorial.size(); i++)
      cout<< ' ' << tutorial.at(i);
   cout<< '\n';
   for (int i=0; i<tutorial.size(); i++)
      sub -= tutorial.at(i);
   cout<< "Subtraction of all the values is : " << sub << "\n";
   return 0;
}

输出

让我们编译并运行上述程序,它将产生以下结果:

Values:
 2 4 6 8 1 3 5 7
Subtraction of all the values is : -36

示例 4

以下是另一种情况,我们将使用 at() 函数更改向量值。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> tutorial {22,88,66,55,44};
   cout << "Declared Vector: ";
   for (const int& i : tutorial) {
      cout << i << "  ";
   }
   tutorial.at(2) = 77;
   tutorial.at(0) = 99;
   cout << "\nModified Vector: ";
   for (const int& i : tutorial) {
      cout << i << "  ";
   }
   return 0;
}

输出

运行上述程序后,将产生以下结果:

Declared Vector: 22  88  66  55  44  
Modified Vector: 99  88  77  55  44

示例 5

让我们考虑以下示例,它在传递 'age.at(3) = 5'(超出已声明向量范围)时会抛出错误。

#include <iostream>
#include <vector>
using namespace std;

int main(){
   vector<int> age = {2,3,4};
   age.at(3) = 5;
   for(int i = 0; i < age.size() ; i++) {
      cout << "age[" << i << "] = " << age.at(i) << endl;
   }
   return 0;
}

输出

执行上述程序时,将产生以下结果:

terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 3) >= this->size() (which is 3)
广告
© . All rights reserved.