Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Vector

  1. #1
    Ngày gia nhập
    11 2021
    Bài viết
    2

    Mặc định Vector

    #include <bits/stdc++.h>
    #include<iostream>
    using namespace std;

    template <typename T>
    class Vector1
    {
    private:
    int size; // bien luu do dai cua vector
    int capacity; // bien luu dung luong cua vector
    T *array; // tao con tro chua mang
    void expand(int newCapacity); // ham tang dung luong vector
    public:
    Vector1(int initCapacity = 100); // ham tao vector
    ~Vector1(); // ham huy vector
    Vector1 &operator=(Vector1 &rhs); // ham nap chong toan tu gan
    int Size(); // ham tra ve kich thuoc
    bool empty(); // ham kiem tra vector giong
    T &operator[](int index); // ham nap chong toan tu truy cap chi so vector
    void push_back(T newElement); // ham day phan tu vao cuoi vector
    void pop_back(); // ham xoa phan tu cuoi vector
    void insert(int pos, T newElement); // ham them phan tu vao vi tri pos
    void erase(int pos); // ham xoa phan tu tai vi tri pos
    void clearn(); // ham xoa tat ca cac phan tu vector
    };

    template <typename T>
    void Vector1<T>::expand(int newCapacity)
    {
    if (newCapacity <= size)
    return;

    T * old = array; // old tro toi mang cu
    array = new T[newCapacity]; // array tro toi mang moi

    for (int i = 0; i < size; i++)
    array[i] = old[i]; // sao chep phan tu tu mang cu sang mang moi

    delete[] old; // xoa mang cu
    capacity = newCapacity; // dat dung luong moi
    }
    template <typename T>
    Vector1<T>::Vector1(int initCapacity = 100)
    {
    size = 0;
    capacity = initCapacity;
    array = new T[capacity];
    }
    template <typename T>
    Vector1<T>::~Vector1()
    {
    delete[] array;
    }
    template <typename T>
    Vector1 &operator=(Vector1 &rhs)
    {
    if (this != &rhs) // ngan can tu sao chep
    {
    delete[] array; // xoa mang hien tai
    size = rhs.size; // dat kich thuoc moi
    capacity = rhs.capacity; // dat dung luong moi
    array = new T[capacity]; // tao mang moi

    // Sao chep cac phan tu tu phai sang trai
    for (int i = 0; i < size; i++)
    array[i] = rhs.array[i];
    }

    return *this; // tra ve vector ve trai sau khi gan xong
    }
    template <typename T>
    int Vector1<T>::Size()
    {
    return size;
    }
    template <typename T>
    bool Vector1<T>::empty()
    {
    return (size == 0);
    }

    T & operator[](int index)
    {
    return array[index];
    }
    template <typename T>
    void Vector1<T>::push_back(T newElement)
    {
    // Gap doi dung luong neu vector day
    if (size == capacity)
    expand(2 * size);

    // Chen phan tu moi vao ngay sau phan tu cuoi cung
    array[size] = newElement;

    // Tang kich thuoc
    size++;
    }​
    template <typename T>
    void Vector1<T>::pop_back()
    {
    size--;
    }​
    template <typename T>
    void Vector1<T>::insert(int pos, T newElement)
    {
    // Gap doi dung luong neu vector day
    if (size == capacity)
    expand(2 * size);

    // Dich cac phan tu sang phai de tao cho trong cho viec chen
    for (int i = size; i > pos; i--)
    array[i] = array[i - 1];

    // Dat phan tu moi vao vi tri chen
    array[pos] = newElement;

    // Tang kich thuoc
    size++;
    }
    template <typename T>
    void Vector1<T>::erase(int pos)
    {
    // Dich cac phan tu sang trai de lap day cho trong de lai do viec xoa
    for (int i = pos; i < size - 1; i++)
    array[i] = array[i + 1];

    // Giam kich thuoc
    size--;
    }
    template <typename T>
    void Vector1<T>::clearn()
    {
    size = 0;
    }


    int main()
    {
    Vector1<int> a;
    a.push_back(1);
    a.push_back(2);
    a.pop_back();
    a.insert(0,2);
    a.clearn();
    return 0;
    }

    Mọi người ơi giúp em fix lỗi với ạ.
    Lỗi như thế này ạ.
    \Vector1.cpp:43:1: error: redeclaration of 'Vector1<T>::Vector1(int)' may not have default arguments [-fpermissive]
    43 | Vector1<T>::Vector1(int initCapacity = 100)
    | ^~~~~~~~~~
    .\Vector1.cpp:55:1: error: invalid use of template-name 'Vector1' without an argument list
    55 | Vector1 &operator=(Vector1 &rhs)
    | ^~~~~~~
    .\Vector1.cpp:55:1: note: class template argument deduction is only available with '-std=c++17' or '-std=gnu++17'
    .\Vector1.cpp:6:7: note: 'template<class T> class Vector1' declared here
    6 | class Vector1
    | ^~~~~~~
    .\Vector1.cpp:82:1: error: 'T' does not name a type
    82 | T & operator[](int index)
    | ^
    .\Vector1.cpp:98:3: error: '\U0000200b' does not name a type
    98 | }âm
    |
    .\Vector1.cpp:103:3: error: '\U0000200b' does not name a type
    103 | }âm
    |

  2. #2
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    1,005

    C++ Code:
    1. #include <bits/stdc++.h>
    2. #include<iostream>
    3. using namespace std;
    4.  
    5. template <typename T>
    6. class Vector1
    7. {
    8. private:
    9.     int size; // bien luu do dai cua vector
    10.     int capacity; // bien luu dung luong cua vector
    11.     T *array; // tao con tro chua mang
    12.     void expand(int newCapacity); // ham tang dung luong vector
    13. public:
    14.     Vector1(int initCapacity=100); // ham tao vector
    15.     ~Vector1(); // ham huy vector
    16.     Vector1 &operator=(const Vector1 &rhs); // ham nap chong toan tu gan
    17.     int Size(); // ham tra ve kich thuoc
    18.     bool empty(); // ham kiem tra vector giong
    19.     T &operator[](int index); // ham nap chong toan tu truy cap chi so vector
    20.     void push_back(T newElement); // ham day phan tu vao cuoi vector
    21.     void pop_back(); // ham xoa phan tu cuoi vector
    22.     void insert(int pos, T newElement); // ham them phan tu vao vi tri pos
    23.     void erase(int pos); // ham xoa phan tu tai vi tri pos
    24.     void clearn(); // ham xoa tat ca cac phan tu vector
    25. };
    26.  
    27. template <typename T>
    28. void Vector1<T>::expand(int newCapacity)
    29. {
    30.     if (newCapacity <= size)
    31.         return;
    32.     T * old = array; // old tro toi mang cu
    33.     array = new T[newCapacity]; // array tro toi mang moi
    34.     for (int i = 0; i < size; i++)
    35.         array[i] = old[i]; // sao chep phan tu tu mang cu sang mang moi
    36.     delete[] old; // xoa mang cu
    37.     capacity = newCapacity; // dat dung luong moi
    38. }
    39.  
    40. template <typename T>
    41. Vector1<T>::Vector1(int initCapacity)
    42. {
    43.     size = 0;
    44.     capacity = initCapacity;
    45.     array = new T[capacity];
    46. }
    47.  
    48. template <typename T>
    49. Vector1<T>::~Vector1()
    50. {
    51.     delete[] array;
    52. }
    53.  
    54. template <typename T>
    55. Vector1<T> &Vector1<T>::operator=(const Vector1 &rhs)
    56. {
    57.     if (this != &rhs) // ngan can tu sao chep
    58.     {
    59.         delete[] array; // xoa mang hien tai
    60.         size = rhs.size; // dat kich thuoc moi
    61.         capacity = rhs.capacity; // dat dung luong moi
    62.         array = new T[capacity]; // tao mang moi
    63.  
    64.         // Sao chep cac phan tu tu phai sang trai
    65.         for (int i = 0; i < size; i++)
    66.             array[i] = rhs.array[i];
    67.     }
    68.     return *this; // tra ve vector ve trai sau khi gan xong
    69. }
    70.  
    71. template <typename T>
    72. int Vector1<T>::Size()
    73. {
    74.     return size;
    75. }
    76.  
    77. template <typename T>
    78. bool Vector1<T>::empty()
    79. {
    80.     return (size == 0);
    81. }
    82.  
    83. template <typename T>
    84. T & Vector1<T>::operator[](int index)
    85. {
    86.     return array[index];
    87. }
    88.  
    89. template <typename T>
    90. void Vector1<T>::push_back(T newElement)
    91. {
    92.     // Gap doi dung luong neu vector day
    93.     if (size == capacity)
    94.         expand(2 * size);
    95.     // Chen phan tu moi vao ngay sau phan tu cuoi cung
    96.     array[size] = newElement;
    97.     // Tang kich thuoc
    98.     size++;
    99. }
    100.  
    101. template <typename T>
    102. void Vector1<T>::pop_back()
    103. {
    104.     size--;
    105. }
    106.  
    107. template <typename T>
    108. void Vector1<T>::insert(int pos, T newElement)
    109. {
    110.     // Gap doi dung luong neu vector day
    111.     if (size == capacity)
    112.         expand(2 * size);
    113.  
    114.     // Dich cac phan tu sang phai de tao cho trong cho viec chen
    115.     for (int i = size; i > pos; i--)
    116.         array[i] = array[i - 1];
    117.  
    118.     // Dat phan tu moi vao vi tri chen
    119.     array[pos] = newElement;
    120.  
    121.     // Tang kich thuoc
    122.     size++;
    123. }
    124.  
    125. template <typename T>
    126. void Vector1<T>::erase(int pos)
    127. {
    128.     // Dich cac phan tu sang trai de lap day cho trong de lai do viec xoa
    129.     for (int i = pos; i < size - 1; i++)
    130.         array[i] = array[i + 1];
    131.  
    132.     // Giam kich thuoc
    133.     size--;
    134. }
    135.  
    136. template <typename T>
    137. void Vector1<T>::clearn()
    138. {
    139.     size = 0;
    140. }
    141.  
    142. int main()
    143. {
    144.     Vector1<int> a;
    145.     a.push_back(1);
    146.     a.push_back(2);
    147.     a.pop_back();
    148.     a.insert(0,2);
    149.     a.clearn();
    150.     return 0;
    151. }
    .
    .

  3. #3
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    620

    Trong code trên của MHoang
    Đã sửa dòng 41 thành
    Vector1<T>::Vector1(int initCapacity)
    Đã bỏ đi "= 100"
    Có 1 lỗi logic ở dòng 30
    Sao lại là newCapicity <= size
    Phải là newCapacity <= capacity chứ
    Đã được chỉnh sửa lần cuối bởi khoaph : 06-12-2021 lúc 02:41 PM.

  4. #4
    Ngày gia nhập
    11 2021
    Bài viết
    2

    Dạ em cảm ơn.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn