我有以下数组:
int a1[] = {1,2,3,4,5,6};
我想知道如何在前面和后面添加任何数字。在JavaScript中,有unshift()和push()。在C ++中有类似的东西吗?
答案 0 :(得分:2)
在C ++中,数组是一种类型,数组大小是该类型的一部分。因此,数组对象的大小是此对象类型的一部分,在运行时不可修改。
要在C ++中管理对象的动态集合,通常使用容器类。标准库中包含几个有用的容器;最重要的是std::vector
,它管理一个动态的,连续存储的元素序列 - 本质上是一个可调整大小的数组!
JavaScript数组更接近C ++向量(或者可能是哈希映射)而不是C ++数组。
答案 1 :(得分:1)
与Javascipt数组(多用途数组)不同,C ++为您提供了几种类型的连续容器。
在您的示例中,您演示了内置数组的使用,也称为 C-arrays 。它们基本上是大小不可变的数组,除了是一个包含变量值的字节行之外,它们没有特殊的功能。
对于灵活的高级数组,请使用std::vector
或不太知名但非常棒的std::deque
。
另外,熟悉std::array
,这是内置数组的一个很好的替代。
答案 2 :(得分:0)
您无法直接执行此操作,但如果您愿意,可以编写一个简单的代码来管理它:
#include <stdlib.h>
#include<stdarg.h>
#include <iostream>
using namespace std;
typedef struct int_array
{
int *ptr;
int len;
int_array(int n_args, ...)
{
ptr = NULL;
len = 0;
va_list ap;
va_start(ap, n_args);
for (int i = 1; i <= n_args; i++) {
push(va_arg(ap, int));
}
va_end(ap);
}
int operator[](int idx) const
{
return ptr[idx];
}
void push(int value)
{
ptr = (int*)(len ? realloc(ptr, (len + 1)*sizeof(int)) : malloc(sizeof((len + 1))));
ptr[len++] = value;
}
void unshift(int value)
{
ptr = (int*)(len ? realloc(ptr, (len+1)*sizeof(int)) : malloc(sizeof(len+1)));
for (int i = len++; i > 0; i--)
{
ptr[i] = ptr[i-1];
}
ptr[0] = value;
}
}IntArray;
int main(int argc, char** argv)
{
IntArray arr(6/* initial len */, 1, 2, 3, 4, 5, 6);
arr.push(7);
arr.push(8);
arr.unshift(0);
arr.unshift(-1);
for (int i = 0; i < arr.len;i++)
{
cout << arr[i] << endl;
}
return 0;
}