向量运算符[]和at()有什么区别

时间:2018-12-06 05:43:21

标签: c++ pointers types stdvector dereference

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

std::vector<int*>* MyVector;

我尝试使用以下两种方法进行访问:

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

据我了解,向量[] 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");
}

2 个答案:

答案 0 :(得分:5)

MyVector是向量的指针,而不是向量的

两种解决方案:

  1. 由于vector是一个指针,因此需要取消引用该指针 首先找回(*MyVector)[i]

    operator
  2. 较少使用:使用MyVector->operator[](i) 关键字:

     $image_icon = $request->file('image_icon');
     $data['image'] = $image_icon->getClientOriginalName().'.'.time();
     $destinationPath = public_path('/images');
     $image_icon->move($destinationPath, $data['image']);
    

答案 1 :(得分:1)

问题是您已经声明了指向向量的指针。在第二个表达式中,您实际上将MyVector视为一个数组,在其中您尝试访问类型为i的第std::vector<int*>个元素(我认为该元素不存在)。