В чем разница между векторным оператором [] и at () - PullRequest
0 голосов
/ 06 декабря 2018

Я возиться с указателем на вектор указателей

std::vector<int*>* MyVector;

К которому я пытаюсь получить доступ, используя эти 2 метода:

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

Насколько я понимаю, разницамежду векторами [] 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");
}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

MyVector - это указатель на вектор , а не вектор .

Два решения:

  1. Поскольку MyVector является указателем, необходимо сначала разыменовать указатель, чтобы получить обратно vector.

    (*MyVector)[i]
    
  2. Менее используется: используйте ключевое слово operator:

    MyVector->operator[](i)
    
0 голосов
/ 06 декабря 2018

Проблема в том, что вы объявили указатель на вектор.Во втором выражении вы фактически обрабатываете MyVector как массив, в котором вы пытаетесь получить доступ к i -ому элементу типа std::vector<int*> (который, я полагаю, не существует).

...