【问题标题】:C++ resize array to smaller size keep same name delete old place in arrayC ++将数组大小调整为较小的大小保持相同的名称删除数组中的旧位置
【发布时间】:2014-08-02 11:18:12
【问题描述】:

我有一个空间对象(我的东西)数组,我需要减少但保持相同的名称以处理一些碰撞。我将数组设置为:

ufo** ufoAr = new ufo*[numberOfUfos];
for (int i=0; i<numberOfUfos; i++) {
    ufoAr[i] = new ufo(randomIntBetween(1630, 70), randomIntBetween(860, 45));
}

当我检测到碰撞时,我想用两个 less 调整数组的大小并删除数组的两个特定元素。喜欢这里:

//look through all the ufoAr[]
for (int i=0; i<numberOfUfos; i++) {
    //look through ufoAr[] again to see other objects
    for(int j=0; j<10; j++) {
        //if the same
        if (i==j){ continue; }
    else {
            //find a collision
        if(ufoAr[i]->collision(ufoAr[j]->sp)) {
                //Array::Resize(ufoAr, numberOfUfos-2);         
                //numberOfUfos = numberOfUfos - 2;
            // ------ TRY TO RESIZE ARRAY TO -2 BUT SAME NAME WITHOUT iTH AND jTH ELEM
                ufoAlive[i] = false;
            ufoAlive[j] = false;
        }
        }
    }
}

非常感谢任何有关调整阵列大小的帮助,在此先感谢。我真的很挣扎,需要另一种意见。谢谢

杰克

【问题讨论】:

  • 既然是C++,有什么理由不用std::vector&lt;ufo&gt;
  • 我打算用intel icpc编译并行机,用cilk_plus,我相信向量运算是禁止的

标签: c++ arrays memory resize


【解决方案1】:

最简单的方法是使用 std::vector 并让它为您处理大小调整。

cplusplus.com reference

cppreference page

【讨论】:

    【解决方案2】:

    为此,您需要首先创建一个新数组,例如

    ufo** ufoArTmp = new ufo*[numberOfUfos-2];
    

    然后将ufoAr的内容[您要保留]复制到ufoArTmp。完成后,您执行delete [] ufoAr,最后执行ufoAr = ufoArTmp; 来更新原始指针。此时不要删除ufoArTmp,因为它与ufoAr 中的值相同,并且您想保留它,对。

    开始时显然要特别注意numberOfUfos小于2... ;)

    编辑,在阅读其他代码时:

    不要这样做:

        if (i==j){ continue; }
    else {
    

    好多了:

     if (i!=j) {
    

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2012-01-19
      相关资源
      最近更新 更多