#include <iostream>
#include <vector>
#include <algorithm> // Include this for std::find
class unorderedArrayListType {
protected:
std::vector<int> elements;
public:
virtual void insertAt(int index, int value) {
if (index >= 0 && index <= elements.size()) {
elements.insert(elements.begin() + index, value);
} else {
std::cout << "Index " << index << " is out of bounds." << std::endl;
}
}
virtual void insertEnd(int value) {
elements.push_back(value);
}
virtual void replaceAt(int index, int value) {
if (index >= 0 && index < elements.size()) {
elements[index] = value;
} else {
std::cout << "Index " << index << " is out of bounds." << std::endl;
}
}
};
class unorderedSetType : public unorderedArrayListType {
public:
void insertAt(int index, int value) override {
if (std::find(elements.begin(), elements.end(), value) != elements.end()) {
std::cout << value << " is already in the set." << std::endl;
} else {
unorderedArrayListType::insertAt(index, value);
}
}
void insertEnd(int value) override {
if (std::find(elements.begin(), elements.end(), value) != elements.end()) {
std::cout << value << " is already in the set." << std::endl;
} else {
unorderedArrayListType::insertEnd(value);
}
}
void replaceAt(int index, int value) override {
if (index < elements.size() && std::find(elements.begin(), elements.end(), value) == elements.end()) {
unorderedArrayListType::replaceAt(index, value);
} else if (index >= elements.size()) {
std::cout << "Index " << index << " is out of bounds." << std::endl;
} else {
std::cout << value << " is already in the set." << std::endl;
}
}
// Method to print the elements for testing
void printElements() const {
for (int elem : elements) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
};
// Test Program
int main() {
unorderedSetType mySet;
mySet.insertEnd(10);
mySet.insertEnd(20);
mySet.insertEnd(10); // Should say "10 is already in the set."
mySet.insertAt(1, 20); // Should say "20 is already in the set."
mySet.replaceAt(1, 30); // Should work if 30 isn't in the set
mySet.replaceAt(1, 10); // Should say "10 is already in the set."
mySet.printElements();
return 0;
}