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)
根据我的理解,向量[] operator和at方法之间的区别在于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)
它MyVector是一个指向矢量的指针,而不是矢量.
两种解决方案
既然MyVector是一个指针,你需要首先取消引用指针以取回指针vector.
(*MyVector)[i]
Run Code Online (Sandbox Code Playgroud)较少使用:使用operator关键字:
MyVector->operator[](i)
Run Code Online (Sandbox Code Playgroud)