C++中vector的at函数是怎么使用啊 ?代表啥值啊??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中vector的at函数是怎么使用啊 ?代表啥值啊??相关的知识,希望对你有一定的参考价值。
通常来说,假设v是一个vector对象,则v.at(n)和v[n]是一样的,只不过前者会检查是否越界(因此花费的时间稍多),而后者不会(后者越界会导致未定义行为)。
具体而言,vector<T>(T是某种类型)的at函数接受一个vector<T>::size_type类型的参数n(一种无符号整型类型),返回容器位置为n的元素的引用(注意第一个位置为0)。函数的时间复杂度为O(1),即常数时间。如果n越界,会抛出out_of_range异常。
样例:(摘自cplusplus.com)
// vector::at#include <iostream>
#include <vector>
int main ()
std::vector<int> myvector (10); // 10 zero-initialized ints
// assign some values:
for (unsigned i=0; i<myvector.size(); i++)
myvector.at(i)=i;
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); i++)
std::cout << ' ' << myvector.at(i);
std::cout << '\\n';
return 0;
参考技术A at函数和[]函数使用可以说是一模一样. 都是为了访问对应index中存储的数据, 如果index大于vector的size. 两者都是抛出out_of_range的exception. size可以通过size()函数获得. 参考技术B at配合try语句使用
C++ 里vector的使用,运行时出错,请问怎么解决??
#include <iostream>
#include <vector>
using namespace std;
class A
public:
vector<int> getVector()
return list;
private:
vector<int> list;
;
void pushNum(A* a)
a->getVector().push_back(1);
cout << a->getVector().at(0) << endl;
int main()
A a = A();
pushNum(&a);
cout << a.getVector().at(0) << endl;
return 0;
程序运行时出错,怎么解决?求解!
所以,void pushNum(A* a)中:
第一行,a->getVector()创建一个vector<int>临时变量,临时变量调用push_back(1),list仍为空,之后临时变量销毁;
第二行,a->getVector()创建另一个vector<int>临时变量,由于list为空,该临时变量亦为空,之后临时变量调用at(0)越界出错。追问
老师不好意思现在没办法上机调试,如果把函数getVector()改为return &list是否就正确了
本回答被提问者采纳 参考技术B #include <iostream>#include <vector>
using namespace std;
//
class A
public:
vector<int> getVector()
return list;
void pushNum(int num)
this->list.push_back(num);
cout << this->list.at(0) << endl;
private:
vector<int> list;
;
//
int main()
A a = A();
a.pushNum(12);
cout << a.getVector().at(0) << endl;
return 0;
追问
不好意思 ,我问的问题目的是解决关于vector对象作为值得传递问题。不是单纯完成上述代码的功能。
以上是关于C++中vector的at函数是怎么使用啊 ?代表啥值啊??的主要内容,如果未能解决你的问题,请参考以下文章