动态大小的对数组:设置第一个/第二个的值

时间:2017-04-22 21:03:41

标签: c++ arrays

在使用数组对时,我不断收到错误“下标需要数组或指针类型”。我已经查看了所有其他类似问题的线程,但一直无法解决它。

我动态声明了一对看起来像对的数组:

pair<T, int> *m_Array;

使用以下命令设置数组大小:

m_Array = new pair<T, int>[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 个答案:

答案 0 :(得分: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,然后让它为您完成所有工作。