Reputation: 53
I have this program where I want to insert and delete items in a list. I'm having trouble with my remove function. I want the user to tell me which index they want to delete in the list and then decrease the size of the list and then move the items together. For example: 333 222 111 if I delete the 2nd number then the list would look like 333 111 and the size of the list would decrease to 2.
thanks in advance!
/* insert
* parameters:
* index -- the place in the list to insert newItem
* newItem -- the item to insert into the list
* returns:
* true -- if the item is successfully inserted
* false -- otherwise
* precondition: 0 < index
* postcondition: newItem is in postiion "index" of the list
* Algorithm: stuff
*/
bool myList::insert(int index, ListItemType newItem) {
if (!(index > 0)) {
cerr << "insert: precondition failed with index = " << index << endl;
return false;
}
if (size == MAX_LIST) {
cout << "List is full" << endl;
return false;
}
if (index > size) {
items[size] = newItem;
size++;
return true;
}
//list is not full and index is b/w items 1 and size-1
for (int i = size; i >= index; i--) {
items[i] = items[i - 1];
}
items[index - 1] = newItem;
size++;
return true;
}
bool myList::remove(int index) {
//I tried this but it doesn't work well enough
if (!(index > 0)) {
cerr << "insert: precondition failed with index = " << index << endl;
return false;
}
for (int i = size; i >= 0; i--) {
items[index] = items[index + 1];
}
size--;
return true;
}
Upvotes: 3
Views: 1929
Reputation: 10348
Like other people said, you should try to use stl. But going with the code you have so far. You should change your for for something like this:
for (int i = index; i < size - 1; i++)
{
items[i] = items[i+1];
}
What this does is, from the deleted item on, replace each item with the one that follows. It is like shifting to the left.
This wont destroy any elements, but I am guessing we can let that go.
Upvotes: 2