2015-11-21 5 views
0

Фрукты:Удалить объект из массива в C++ класса

#include <string> 
using namespace std; 

class Fruits { 
    string color; 
public: 
    Fruits() { 
     color = "r"; 
    } 
}; 

Главная:

#include "Fruits.cpp" 

void main() { 
    Fruits* fruits[6]; 
    fruits[0] = new Fruits(); 
// delete[] fruits[0]; // <-- does not work (deletes one object) 
// delete[] fruits; //  <-- does not work (deletes all objects in the array) 
} 

Как я могу это сделать?

ответ

0

delete fruits[0] удалит этот объект для вас. delete[] вместо этого служит для удаления всех ненулевых элементов этого массива, но fruits[0] не является массивом объектов.

0

Вы не можете delete, что не было выделено с new, и вы не можете смешивать new [] и delete ни new и delete [].

Во-первых, вам нужно динамически выделяемое пространство для элементов, не обязательно массив указателей. Удаление элемента может быть выполнено путем смещения всех следующих элементов, поэтому следующий элемент заменяет удаленный элемент, оставляя неиспользуемый элемент в конце массива, а затем, возможно, сокращая выделенное пространство.

Это практически реализуется с std::vector, и вы не должны внедрять его самостоятельно как новичок. Если вы ищете эту функцию, используйте std::vector!

1

Вы не можете удалить элемент массива с использованием стандартных массивов C++. Вместо этого используйте std::vector.

Массив, который инициализирован new[], представляет собой буфер, указатель которого указывает на его первую ячейку памяти. В векторах и списках элементы связаны. Поэтому каждый элемент указывает на свой предыдущий и следующий элементы, что упрощает удаление или вставку элементов. Однако для этого требуется больше памяти.

Пример

// constructing vectors 
#include <iostream> 
#include <vector> 

int main() 
{ 
    // constructors used in the same order as described above: 
    std::vector<int> first;        // empty vector of ints 
    std::vector<int> second (4,100);      // four ints with value 100 
    std::vector<int> third (second.begin(),second.end()); // iterating through second 
    std::vector<int> fourth (third);      // a copy of third 

    // the iterator constructor can also be used to construct from arrays: 
    int myints[] = {16,2,77,29}; 
    std::vector<int> fifth (myints, myints + sizeof(myints)/sizeof(int)); 

    std::cout << "The contents of fifth are:"; 
    for (std::vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it) 
    std::cout << ' ' << *it; 
    std::cout << '\n'; 

    return 0; 
} 

И только для разъяснения,

delete fruits[0] 

будет удалить плод, который расположен на 0-й элемент массива, но это не приведет к удалению его из массива или сделать массив одним элементом короче.

Смежные вопросы