c++ 手动实现Myvector

要实现的函数: 构造函数;析构函数;拷贝构造;拷贝赋值;at(); empty();full() ;front(); back(); size(); clear(); expand();  push_back(); pop_back()。

#include <iostream>
#include <cstring>
 
using namespace std;
 
template <typename T>
class Myvector
{
private:
    T *first;
    T *last;
    T *end;
    T data;
    T num;
 
public:
    //无参构造函数
    Myvector() {
        first = nullptr;
        last = first;
        end = first;
    }
 
    //有参构造函数1
    Myvector(T n, T d):data(d), num(n)
    {
        first = new T(n);
        last = first;
        end = first+n;
        for(int i=0; i<n; i++) {
            *last = data;
            last++;
        }
    }
 
    //析构函数
    ~Myvector() {
        delete first;
        first = nullptr;
        delete last;
        last = nullptr;
        delete end;
        end = nullptr;
    }
 
    //拷贝构造
    Myvector(const Myvector &other):first(other.first), last(other.last), end(other.end), data(other.data) {}
 
    //拷贝赋值
    Myvector &operator=(const Myvector &other) {
        this->first = other.first;
        this->last = other.last;
        this->end = other.end;
        this->data = other.data;
 
        return *this;
    }
 
    //at() 访问指定位置的元素
    T &at(int n) {
        T* p = first;
        return *(p+n);
    }
 
    //empty() 判空
    bool empty() {
        return first == last;
    }
 
    //full() 判满
    bool full() {
        return last==end;
    }
 
    //front()返回第一个元素
    T front() {
        return *first;
    }
 
    //back() 返回最后一个元素
    T back() {
        return *(last-1);
    }
 
    //size()  元素数量的大小(元素的个数)
    size_t size() {
        return last-first;
    }
 
    //capacity()  当前所能容纳元素的最大空间
    size_t capacity() {
        return end-first;
    }
 
 
    //clear()  清空所有元素
    void clear() {
        first=last;
    }
 
    //expand()  二倍扩容函数
    void expand() {
        size_t size1 = size();
        if(last==end) {
            T *temp = new T[size1*2];
            memcpy(first, temp, (sizeof(T)*size1));
            delete []first;
            first = temp;
            last = first+size1;
            end = first+(size1*2);
        }
    }
 
    //push_back()  尾插
    void push_back(T r) {
        if(full()) {
            first = new T;
            last = end = first+1;
        }else {
            expand();
        }
        *last = r;
        last++;
    }
 
    //pop_back()  尾删
    void pop_back() {
        last--;
    }
 
 
    //遍历
    void show() {
        for(auto p=first; p!=last; p++) {
            cout<<*p<<"  ";
        }
        cout<<endl;
    }
 
};
 
 
int main()
{
    Myvector<int> m1(8, 5);
 
    Myvector<int> m3;
    m3 = m1;
    m3.show();
 
    cout<<"m1.size = "<<m1.size()<<endl;
 
    m1.show();
 
    cout<<"m1.at(2) = "<<m1.at(2)<<endl;
 
    if(m1.empty()) {
        cout<<"m1为空!"<<endl;
    }else {
        cout<<"m1不为空!"<<endl;
    }
 
    Myvector<int> m2;
    cout<<"m2.size = "<<m2.size()<<"  m2.capacity = "<<m2.capacity()<<endl;
 
    for(int i=0; i<10; i++) {
        m2.push_back(i+1);
        cout<<"m2.size = "<<m2.size()<<"  m2.capacity = "<<m2.capacity()<<endl;
    }
    m2.show();
 
    m1.clear();
    m2.clear();
    m3.clear();
 
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c++ 中的 vector 是一种封装了动态大小数组的容器类型,它可以存储任意类型的对象。与普通的数组相比,vector 具有自动扩展空间和自动回收空间的功能,可以帮助程序员更方便地管理内存。 使用 vector 的一般步骤如下: 1. 在程序中包含头文件 <vector>。 2. 定义一个 vector 变量,指定其中存储的元素类型。 3. 将元素加入 vector 中。vector 支持使用下标访问、插入和删除元素。也可以使用迭代器遍历 vector 中的元素。 示例代码如下: ``` #include <vector> #include <iostream> int main() { // 定义一个存储 int 类型元素的 vector std::vector<int> vec; // 将元素加入 vector 中 vec.push_back(1); vec.push_back(2); vec.push_back(3); // 使用下标访问 vector 中的元素 std::cout << "vec[0] = " << vec[0] << std::endl; // 使用迭代器遍历 vector 中的元素 for (auto iter = vec.begin(); iter != vec.end(); ++iter) { std::cout << *iter << " "; } std::cout << std::endl; return 0; } ``` 输出结果: ``` vec[0] = 1 1 2 3 ``` ### 回答2: C++中的vector是一个动态数组容器,它是C++标准模板库(STL)中的一个重要组成部分。通过vector,我们可以方便地存储和访问多个元素。 vector实现方式是使用一个连续的内存块来存储数据。它的大小可以动态地增长或缩小,以适应需要存储的元素数量的变化。当元素数量超过当前内存块的大小时,vector会自动重新分配更大的内存块,并将原有的元素拷贝到新的内存块中。 vector的使用非常简单。我们可以使用push_back()函数在vector的末尾添加元素。如果vector中没有足够的内存来存储新的元素,push_back()函数会自动重新分配内存。我们也可以使用pop_back()函数删除vector末尾的元素。 vector还提供了一些其他的操作函数,比如可以用下标访问元素,可以获取vector中元素的数量和容量,可以插入或删除指定位置的元素等等。另外,vector还可以通过迭代器遍历元素。 使用vector有一些优点。首先,它提供了方便的操作接口,使得我们可以很容易地对元素进行增删改查。其次,vector在内存分配方面比较高效,它会自动管理内存的分配和释放,避免了手动管理内存的复杂性。 总之,vectorC++中非常常用的一个容器类,它提供了方便的操作接口和高效的内存分配,可以方便地存储和访问多个元素。在实际开发中,我们可以根据需要选择合适的容器类来存储和处理数据,而vector是一个不错的选择。 ### 回答3: C++vector是标准模板库(STL)中的一个容器,它允许动态分配内存,并以连续的方式存储元素。vector可以容纳任何类型的数据,如整型、浮点型、字符型、自定义类等。 在使用vector之前,需要包含头文件<vector>。 通过创建vector对象来实现,例如: ```cpp #include <vector> int main() { // 创建一个整型向量 std::vector<int> myVector; // 向向量添加元素 myVector.push_back(1); myVector.push_back(2); myVector.push_back(3); // 修改向量中的元素 myVector[0] = 4; // 遍历输出向量中的元素 for (int i = 0; i < myVector.size(); i++) { std::cout << myVector[i] << " "; } return 0; } ``` 上述代码首先创建了一个整型向量`myVector`,然后使用`push_back()`函数向向量中添加元素。可以使用索引操作符`[]`来修改向量中的元素,同时可以使用`size()`函数获取向量的大小。 最后,通过遍历循环将向量中的元素输出到控制台。 除了`push_back()`函数,vector还提供了其他一些常用的操作函数,如`pop_back()`删除向量的最后一个元素,`insert()`在指定位置插入元素,`erase()`删除指定位置的元素等等。 总之,C++vector是一个非常方便和强大的容器,可以根据需要动态管理内存,并提供了许多便捷的操作函数来方便地处理数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值