Динамический размерный массив пар: установка значений для первого / второго

Я продолжаю получать ошибки "индекс требует типа массива или указателя" при работе с массивом пар. Я просмотрел все остальные темы с похожими проблемами, но не смог их решить.

Я динамически объявлял массив пар, который выглядит как пара *m_Array; И установите размер массива с помощью m_Array = new pair[c];

Теперь я не могу получить доступ к первому и второму парам в индексе массива. Я получаю ошибку, когда пытаюсь сделать что-то подобное.

for (int i = 0; i < m_Size; i++) {
    m_Array->first[i] = rhs.m_Array->first[i];
    m_Array->second[i] = rhs.m_Array->second[i];
}

Интуитивно кажется, что это должно быть больше похоже на следующий код, но моя IDE не нравится, когда я m_Array[i]

for (int i = 0; i < m_Size; i++) {
    m_Array[i]->first = rhs.m_Array[i]->first;
    m_Array[i]->second = rhs.m_Array[i]->second;
}

Спасибо за любую помощь!

1 ответ

Ты почти у цели.

Если m_Array это указатель на несколько пар, то m_Array[0] первая пара; затем m_Array[0].first является "первым" членом этой первой пары.

Нет необходимости в операторе доступа разыменовывающего члена ->, как подписка [i] уже разыменовался для вас (то есть m_Array[i] средства *(m_Array + i)). Так что вам просто нужен обычный оператор доступа члена.,

Так:

for (int i = 0; i < m_Size; i++) {
    m_Array[i].first  = rhs.m_Array[i].first;
    m_Array[i].second = rhs.m_Array[i].second;
}

Или вы можете пропустить все эти проблемы и просто написать:

for (int i = 0; i < m_Size; i++) {
    m_Array[i] = rhs.m_Array[i];
}

Или вы можете пропустить это тоже и изменить new и массивы к хорошему std::vector, тогда пусть он сделает всю работу за вас.

Другие вопросы по тегам