Nói rằng tôi có một mảng động như:C++ Xóa một phần của mảng động
int* integers = new int[100];
Có cách nào để xóa chỉ là một phần của mảng như:
int* integers2 = integers + 50;
delete[] integers2;
Tôi muốn không chỉ xóa mọi thứ 50 và hơn thế nữa, nhưng nếu tôi gọi một lệnh xóa khác [] trên mảng số nguyên ban đầu, thì nó sẽ chỉ xóa số lượng bộ nhớ chính xác và không cố gắng xóa số lượng đã cấp ban đầu và lỗi seg.
Tại sao tôi muốn thực hiện điều này: Tôi có cấu trúc dữ liệu được cấu trúc theo cấp độ mảng và tôi muốn có thể tạo cấu trúc dữ liệu này từ một mảng đầy đủ. Vì vậy, tôi muốn có thể nói
int* level1 = integers;
int* level2 = integers + 50;
int* level3 = integers + 100;
Nhưng khi cấp 3 không còn cần thiết, cấu trúc dữ liệu sẽ tự động xóa [] level3. Tôi cần phải biết rằng điều này sẽ hành xử một cách chính xác và không chỉ phá hủy mọi thứ trong mảng. Nếu nó sẽ sau đó tôi cần phải chỉ tạo mảng mới và sao chép nội dung trên, nhưng nó sẽ là tốt đẹp để tránh làm điều đó vì lý do hiệu suất.
Chỉnh sửa: Mọi người dường như đang nhảy đến kết luận rằng tôi chỉ nên sử dụng vùng chứa kích thước động (ví dụ: vector, deque) ở vị trí đầu tiên cho cấu trúc dữ liệu của tôi. Tôi đang sử dụng mức độ mảng cho một lý do chính đáng (và chúng không có kích thước bằng nhau như tôi làm cho nó trông giống như trong ví dụ của tôi). Tôi chỉ đang tìm kiếm một cách tốt để có một hàm tạo cho cấu trúc dữ liệu của tôi lấy một mảng hoặc một vectơ và không cần phải sao chép các nội dung ban đầu vào trong cấu trúc dữ liệu mới.
std :: deque là những gì bạn đang tìm kiếm. –
Không, không. Trong thực tế những gì tôi đang tìm kiếm về cơ bản là một cách để tạo ra một deque từ một mảng mà không cần sao chép các giá trị hơn từ mảng ban đầu. – Floss
'std :: deque' hoạt động giống như một mảng tự động định kích thước. Một mảng thẳng lên không thể được thay đổi kích thước (trừ khi nó được phân bổ với 'malloc', và sau đó chỉ kích thước lên) –