实验六

#include <iostream> 

#include <cstdlib>

#include <cstring>

 

class Vector { 

private: 

    int* data; 

    int size; 

    int capacity; 

 

public:  

    Vector(int initialCapacity = 10) : size(0), capacity(initialCapacity) { 

        data = (int*)std::malloc(capacity * sizeof(int)); 

    } 

 

    ~Vector() { 

        std::free(data); 

    } 

 

    void resize(int newSize) { 

        if (newSize > capacity) { 

            capacity = newSize * 2;

            int* newData = (int*)std::malloc(capacity * sizeof(int)); 

            std::memcpy(newData, data, size * sizeof(int)); 

            std::free(data); 

            data = newData; 

        } 

        size = newSize; 

    } 

 

    int getSize() const { 

        return size; 

    } 

 

    int getCapacity() const { 

        return capacity; 

    } 

 

    void setElement(int index, int value) { 

        if (index >= 0 && index < size) { 

            data[index] = value; 

        } else { 

            std::cerr << "Index out of bounds!" << std::endl; 

        } 

    } 

 

 

    int getElement(int index) const { 

        if (index >= 0 && index < size) { 

            return data[index]; 

        } else { 

            std::cerr << "Index out of bounds!" << std::endl; 

            return -1; 

        } 

    } 

 

    Vector* shallowClone() const { 

        Vector* clone = new Vector(capacity); 

        clone->size = size; 

        clone->capacity = capacity; 

        clone->data = data;

        return clone; 

    } 

 

    Vector* deepClone() const { 

        Vector* clone = new Vector(capacity); 

        clone->size = size; 

        clone->capacity = capacity; 

        clone->data = (int*)std::malloc(capacity * sizeof(int)); 

        std::memcpy(clone->data, data, size * sizeof(int)); 

        return clone; 

    } 

}; 

 

int main() { 

    Vector vec(5); 

    for (int i = 0; i < 5; ++i) { 

        vec.setElement(i, i * 10); 

    } 

 

    Vector* shallowClone = vec.shallowClone(); 

    Vector* deepClone = vec.deepClone(); 

 

   

    vec.setElement(2, 999); 

 

    std::cout << "Original vector: "; 

    for (int i = 0; i < vec.getSize(); ++i) { 

        std::cout << vec.getElement(i) << " "; 

    } 

    std::cout << std::endl; 

 

    std::cout << "Shallow clone: "; 

    for (int i = 0; i < shallowClone->getSize(); ++i) { 

        std::cout << shallowClone->getElement(i) << " "; 

    } 

    std::cout << std::endl; 

    std::cout << "Deep clone: "; 

    for (int i = 0; i < deepClone->getSize(); ++i) { 

        std::cout << deepClone->getElement(i) << " "; 

    } 

    std::cout << std::endl; 

    delete shallowClone; 

    delete deepClone; 

 

    return 0; 

}

posted @ 2024-09-18 17:40  芊羽鱼  阅读(12)  评论(0)    收藏  举报