向量运算符[]和at()之间的区别是什么



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

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");
}

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

向量两种解决方案:

  1. 由于MyVector是一个指针,因此需要取消引用该指针首先取回CCD_ 6。

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

    MyVector->operator[](i)
    

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

相关内容

  • 没有找到相关文章

最新更新