Динамический размерный массив пар: установка значений для первого / второго
Я продолжаю получать ошибки "индекс требует типа массива или указателя" при работе с массивом пар. Я просмотрел все остальные темы с похожими проблемами, но не смог их решить.
Я динамически объявлял массив пар, который выглядит как пара *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
, тогда пусть он сделает всю работу за вас.