删除数组中的元素,c ++

时间:2015-09-16 23:48:10

标签: c++ arrays

我有一个套接字数组(pfd [nfd] .fd)。我还有一个指针数组(event_tracking * track [10])。如果在我的代码中有一点我尝试从一个已关闭的套接字接收数据,我想删除两个数组中的数组元素,然后移动数组以填充空白点。

 for(j=1; j<nfd; j++) {
        if(pfd[j].revents&POLLIN) {  

            char* p = track.receive_datagram();

            if (p == 0) { 
            delete track[j-1];
            //Delete element in pfd[nfd].fd
            //Reorder elements of track array
            //Reorder elements of pfd array
            }

        }
  }

我知道你可以调用delete操作符来调用析构函数的轨道,但是我不知道如果缺少一个元素,怎么重新排序数组中的元素?或者如何删除和重新排序pfd数组?

任何帮助将不胜感激!我无法在文本中找到删除和重新排序数组的任何示例。

2 个答案:

答案 0 :(得分:1)

C ++解决方案应该是使用std::vectorstd::array而忘记一切(可能存储智能指针,例如std::unique_ptr<T>)。

如果你真的想要努力,你可以设置这样的东西:

  • 找到要删除的元素(索引i
  • 如果i == LENGTH_OF_ARRAY - 1什么都不做,否则在iLENGTH_OF_ARRAY - 1交换元素,以便要删除的元素位于最后位置
  • 调用delete array[LENGTH_OF_ARRAY - 1]来销毁最后一个元素
  • 调用array = realloc(array, (LENGTH_OF_ARRAY - 1) * sizeof(array[0]))释放数组中已删除元素的内存,并更新LENGTH_OF_ARRAY

答案 1 :(得分:0)

在不更改数据结构的情况下,解决方案是将每个元素复制到您在数组的前一个元素上移除的元素之后。这对链表更有效。使用new[]分配的数组,您不会重新分配任何内容,但可以调整vector的大小。