C++

C++ 知识量:19 - 82 - 316

12.2 动态数组><

动态数组- 12.2.1 -

在C++中,动态数组可以使用指针和内存分配函数new和delete来实现。以下是一个示例代码:

#include <iostream>  
  
int main() {  
    int size;  
    std::cout << "Enter size of array: ";  
    std::cin >> size;  
  
    // 动态分配内存  
    int* arr = new int[size];  
  
    // 向数组中填充数据  
    for (int i = 0; i < size; i++) {  
        arr[i] = i;  
    }  
  
    // 输出数组中的数据  
    std::cout << "Array contents: ";  
    for (int i = 0; i < size; i++) {  
        std::cout << arr[i] << " ";  
    }  
    std::cout << std::endl;  
  
    // 释放内存  
    delete[] arr;  
  
    return 0;  
}

在这个示例中,首先从用户输入中获取数组的大小,然后使用new关键字动态分配了一个大小为size的整数数组。接下来,使用循环向数组中填充数据,并在最后输出数组中的内容。最后,使用delete[]关键字释放了动态分配的内存。

allocator类- 12.2.2 -

在C++中,allocator是一个模板类,用于在内存中分配和释放内存空间,可以用于自定义内存分配方式。allocator类是C++标准库中的一个重要组成部分,它提供了一组用于分配和释放内存的函数,以及一组用于复制和比较对象的函数。

  • allocator类有许多函数,下面列举一些常用的函数:

  • allocator<T>::allocator():默认构造函数,创建一个空的allocator对象。

  • allocator<T>::destructor():析构函数,释放由allocator分配的内存空间。

  • allocator<T>::allocate(n):分配足够的未初始化的内存空间来存储n个类型为T的对象。

  • allocator<T>::deallocate(p, n):释放由p指向的内存空间,该空间包含n个类型为T的对象。

  • allocator<T>::construct(p, args):在给定位置p处构造一个类型为T的对象,使用args作为参数。

  • allocator<T>::destroy(p):销毁位于p处的类型为T的对象。

除了这些基本的函数之外,allocator类还提供了一些其他的功能,例如复制构造函数和比较运算符。这些功能使得allocator可以在容器类中使用,例如std::vector、std::list等。

下面是一个使用allocator类的示例:

#include <iostream>  
#include <vector>  
#include <algorithm>  
#include <iterator>  
  
int main() {  
    std::vector<int, std::allocator<int>> v(std::allocator<int>());  
    v.push_back(1);  
    v.push_back(2);  
    v.push_back(3);  
    std::sort(v.begin(), v.end());  
    for (auto i : v) {  
        std::cout << i << " ";  
    }  
    std::cout << std::endl;  
    return 0;  
}

在这个示例中,创建了一个类型为std::vector<int, std::allocator<int>>的向量对象v,并使用默认的allocator<int>进行初始化。然后向向量中添加了三个整数对象,并使用std::sort()函数对它们进行排序。最后,遍历向量并输出其中的元素。