Синтаксис векторов и указателей - PullRequest
1 голос
/ 10 декабря 2011

Какая разница между говорят:

Vector<int*> myVector[5] and Vector<int> *myVector[5]

Как я вижу, в первом случае мой вектор будет содержать 5 отсчетов указателей на целые. Во втором случае myVector - это указатель на массив из 5-ти дюймов.

Причина, по которой я спрашиваю, состоит в том, что некоторое время назад я написал некоторый код, и теперь я его больше не понимаю.

С Vector<int> *myVector[5], почему я могу сделать

for(int i = 0; i < 5; i++)
        {
            myVector[i] = new Integer(13);
        }

Я точно знаю, что оператор new возвращает указатель, а затем я сохраняю его в myVector, но указатель на int не является правильным int? Я в замешательстве.

Ответы [ 4 ]

1 голос
/ 10 декабря 2011

При использовании Vector * myVector [5] myVector - это не указатель на массив из 5 дюймов, а массив из 5 указателей, которые указывают на вектор.

Vector<int> *myVector[5];
for(int i = 0; i < 5; i++)
{
    myVector[i] = new Integer(13);
}

Здесь myVector [i] - указатель вектора. Я не думаю, что этот кусок кода может компилироваться. Не могли бы вы рассказать подробнее о классе Integer?

0 голосов
/ 10 декабря 2011

Как я вижу, в первом случае мой вектор будет содержать 5 отсчетов указателей на целые.Во втором случае myVector - это указатель на массив из 5-ти точек.

Нет.В первом случае у вас будет 5 Vector<int*> объектов, а во втором случае у вас будет 5 Vector<int> объектов.Vector<int*> - это (вероятно) вектор указателей на целые числа.Vector<int> - это (вероятно) вектор целых чисел.Таким образом, у вас по существу будет двухмерный массив, хотя одно измерение будет динамическим массивом (вектором).

Я знаю, что оператор new возвращает указателья храню его в myVector, но указатель на int не является правильным int?Я в замешательстве.

Указатель на int не является целым числом, но он может храниться как int, по крайней мере, в 32-битной Windows.случай, это не то, что происходит.Указатель на Integer сохраняется как указатель на Vector<int>.Возможно, в некоторых старых версиях Visual C ++ код компилируется, поскольку он допускает неявные преобразования между различными типами указателей.В новых версиях он не должен компилироваться.

0 голосов
/ 10 декабря 2011
std::vector<int*> myVector[5]; // array of vector of pointer to int
std::vector<int> *myVector2[5]; // array of pointer to vector of int
for(int i=0;i<5;i++)
    myVector[i]=*new std::vector<int *>(2);
int j=42;
myVector[0].push_back(&j);
for(int i=0;i<5;i++)
    myVector2[i]=new std::vector<int>(2);
myVector2[0]->push_back(j);
0 голосов
/ 10 декабря 2011
Vector<int*> myVector[5]

Создает массив размером от 5 до Vector<int*>.

 Vector<int> *myVector[5]

Создает массив из 5 указателей на Vector<int>.
Вместо этого использование вектора к вектору - более чистое решение:

vector<vector<int> > myVector(5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...