是自己new出来的动态数组,不是vector
时间: 2024-03-11 08:43:32 浏览: 29
对于自己使用`new`操作符创建的动态数组,可以在创建数组时使用指针记录数组的大小。例如,假设我们创建了一个名为`arr`的动态数组,可以这样记录它的大小:
```
int* arr = new int[10];
int size = 10;
```
在需要获取数组大小的时候,可以直接使用记录的`size`变量,例如:
```
cout << "数组大小为:" << size << endl;
```
需要注意的是,如果动态数组的大小在使用过程中发生了变化,那么记录大小的变量也需要及时更新。
相关问题
c++数组实现vector
C++数组可以实现类似于vector的动态数组功能。具体实现方法如下:
```c++
template <typename T>
class Vector {
private:
T* data;
int size;
int capacity;
public:
Vector() {
data = new T[1];
size = 0;
capacity = 1;
}
void push_back(T val) {
if (size == capacity) {
T* newData = new T[2 * capacity];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity *= 2;
}
data[size++] = val;
}
T& operator[](int index) {
return data[index]; }
int getSize() {
return size;
}
};
```
c++动态数组vector是怎样重新申请内存的,请用c实现类似vector的功能
在C++中,vector动态申请内存的过程是通过调用new操作符实现的。当vector中元素数量超过当前内存空间大小时,会重新申请更大的内存空间,并将原有元素复制到新的内存空间中。
下面是一个用C实现类似vector的简单示例代码,实现了动态增加元素、获取元素数量、获取指定位置的元素等功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int *data; // 存储元素的内存空间
int size; // 当前元素数量
int capacity; // 当前内存空间大小
} Vector;
void vector_init(Vector *vec) {
vec->data = NULL;
vec->size = 0;
vec->capacity = 0;
}
void vector_push_back(Vector *vec, int value) {
// 如果当前元素数量已经等于内存空间大小,需要重新申请更大的内存空间
if (vec->size == vec->capacity) {
int new_capacity = vec->capacity ? vec->capacity * 2 : 1;
int *new_data = (int*)realloc(vec->data, new_capacity * sizeof(int));
if (!new_data) {
printf("error: out of memory\n");
exit(1);
}
vec->data = new_data;
vec->capacity = new_capacity;
}
// 在数组末尾添加新元素
vec->data[vec->size++] = value;
}
int vector_size(const Vector *vec) {
return vec->size;
}
int vector_at(const Vector *vec, int index) {
if (index < 0 || index >= vec->size) {
printf("error: index out of range\n");
exit(1);
}
return vec->data[index];
}
int main() {
Vector vec;
vector_init(&vec);
for (int i = 0; i < 10; i++) {
vector_push_back(&vec, i);
}
for (int i = 0; i < vector_size(&vec); i++) {
printf("%d ", vector_at(&vec, i));
}
printf("\n");
return 0;
}
```
在上面的示例代码中,我们使用realloc函数来重新申请更大的内存空间。如果申请失败,则会打印错误信息并退出程序。vector_push_back函数用于向数组末尾添加新元素,如果当前元素数量已经等于内存空间大小,则会调用realloc函数申请更大的内存空间。vector_size函数用于获取当前元素数量,vector_at函数用于获取指定位置的元素。
阅读全文