Skip to content

Collection Class

BrandonRobare edited this page Jun 2, 2026 · 1 revision

Collection Class

A container that stores a set of unique double values in a dynamically allocated array. The array grows by one when I add a number and shrinks by one when I remove one. Duplicates are rejected on add.

Source files: collection/collection.hpp, collection/collection.cpp, collection/userInput.cpp.

What it does

  • addNumber(double) adds a value if it is not already present. It allocates a new array one slot larger, copies the old values, appends the new value, and replaces the old array.
  • removeNumber(double) deletes a value if present. It allocates a new array, copies every element except the matched one, shifting later elements down, and replaces the old array.
  • check(double) returns the index of a value or -1 if it is absent.
  • value() returns the sum of all elements.
  • output() prints the elements separated by spaces.
  • size() returns the element count.

The class manages its own heap memory, so it defines the copy constructor, the assignment operator, and the destructor. The copy constructor and assignment both allocate a fresh array and deep-copy the elements, so two collections never share the same buffer. Assignment guards against self-assignment before freeing its array.

Class layout

classDiagram
    class Collection {
        -double* col_
        -int size_
        +Collection()
        +Collection(const Collection&)
        +operator=(const Collection&) Collection&
        +~Collection()
        +size() int
        +check(double) int
        +addNumber(double) void
        +removeNumber(double) void
        +output() void
        +value() double
    }
Loading

col_ points at the heap array. size_ tracks how many doubles it holds. A default-constructed collection starts empty with a null pointer.

Driver

userInput.cpp runs a small loop. It reads a command and, for add or remove, a number:

  • a <number> adds the number. If it is already present, it prints duplicate!.
  • r <number> removes the number. If it is absent, it prints not present!.
  • anything else quits.

After each successful add or remove it prints the current contents and the running total.

enter operation [a/r/q] and number: a 4
your numbers: 4 , total value: 4
enter operation [a/r/q] and number: a 6
your numbers: 4 6 , total value: 10
enter operation [a/r/q] and number: a 4
duplicate!
enter operation [a/r/q] and number: r 4
your numbers: 6 , total value: 6
enter operation [a/r/q] and number: q

Build and run

g++ -std=c++11 collection/*.cpp -o collection
./collection

Known rough edges

addNumber and removeNumber free the old buffer with delete rather than delete[], which is the wrong form for an array allocated with new[]. removeNumber also allocates size_ + 1 slots when it only needs size_ - 1. The class works for the lab's inputs, and these are noted on the Roadmap page.

Clone this wiki locally