Bị kẹt trong chức năng xóa trên bài tập 11 ch 11 11. Tôi đã phá hủy các đối tượng nhưng tôi không có ý tưởng làm thế nào để sử dụng deallocation từ thư viện cấp phát để trả lại không gian.Tập thể dục tăng tốc C++ 11-6
Vui lòng gửi tiền cho tôi. PS: không phải bài tập về nhà nhưng tôi đang thực hành ở nhà
Dưới đây là mã từ Tăng tốc C++ và sau đó là chức năng xóa sửa đổi của tôi. Cảm ơn '
template <class T> class Vec
{
public:
typedef T* iterator;
typedef const T* const_iterator;
typedef size_t size_type;
typedef T value_type;
typedef T& reference;
typedef const T& const_reference;
Vec() { create(); }
explicit Vec(size_type n, const T& t = T()) { create(n, t); }
Vec(const Vec& v) { create(v.begin(), v.end()); }
Vec& operator=(const Vec&);
~Vec() { uncreate(); }
T& operator[](size_type i) { return data[i]; }
const T& operator[](size_type i) const { return data[i]; }
void push_back(const T& t)
{
if (avail == limit)
{
grow();
}
unchecked_append(t);
}
iterator erase(iterator);
iterator erase(iterator, iterator);
void clear();
size_type size() const { return avail - data; }
iterator begin() { return data; }
const iterator begin() const { return data; }
iterator end() { return avail; }
const iterator end() const { return avail; }
private:
iterator data;
iterator avail;
iterator limit;
std::allocator<T> alloc;
void create();
void create(size_type, const T&);
void create(const_iterator, const_iterator);
void uncreate();
void grow();
void unchecked_append(const T&);
};
MY MÃ
template <class T> typename Vec<T>::iterator Vec<T>::erase(iterator first, iterator second)
{
if(second < first)
{
throw std::out_of_range("Iterator out of bounds.");
}
if(first < data || second >= avail)
{
throw std::out_of_range("Iterator out of bounds.");
}
iterator last = avail -1 ;
iterator i = first ;
iterator j = second ;
while(j <= last)
{
*i++ = *j++ ;
}
// destroy each initilsed space
iterator new_avail = avail - first + second ;
std::cout << " end " << end() << std::endl;
while(avail != new_avail)
{
alloc.destroy(--avail) ;
}
// dellocate space how to do that ?
alloc.deallocate(avail -1, ); // not sure what to do here
return first ;
}
Bạn đang thực sự cố gắng làm gì? – thecoshman