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;

程序运行时出错,怎么解决?求解!

参考技术A vector<int> getVector()返回值为list的副本,而非list;
所以,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函数是怎么使用啊 ?代表啥值啊??的主要内容,如果未能解决你的问题,请参考以下文章

c++ vector find 如何查找啊?语法是怎么写的?

c++请教 vector sort怎么写

C++ 里vector的使用,运行时出错,请问怎么解决??

c++中容器是啥概念啊?

C++ 结构/向量编译问题

指向 C++ 中的引用的指针