vector运算符[]和at()之间有什么区别

Vis*_*huu 1 c++ types pointers stdvector dereference

我正在乱搞一个指针向量的指针

std::vector<int*>* MyVector;
Run Code Online (Sandbox Code Playgroud)

我试图使用这两种方法访问:

MyVector->at(i);    //This works
MyVector[i]         //This says "Expression must be a pointer to a complete object type"
Run Code Online (Sandbox Code Playgroud)

根据我的理解,向量[] operatorat方法之间的区别在于at方法进行了额外的边界检查,所以我的问题是为什么at方法成功访问元素而[] operator不是?

编辑:

整个代码在这里

#include <vector>
#include <iostream>

std::vector<int*>* MyVector;

int main()
{
    MyVector = new std::vector<int*>;
    MyVector->push_back(new int(5));


    for (unsigned int i = 0; i < MyVector->size(); i++)
    {
        delete MyVector->at(i); //This works
        delete MyVector[i];     //This says "Expression must be a pointer to a complete object type
    }

    system("pause");
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*zie 5

MyVector是一个指向矢量指针,而不是矢量.

两种解决方案

  1. 既然MyVector是一个指针,你需要首先取消引用指针以取回指针vector.

    (*MyVector)[i]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 较少使用:使用operator关键字:

    MyVector->operator[](i)
    
    Run Code Online (Sandbox Code Playgroud)