C ++:附加到前面,添加到int的后面数组

时间:2015-11-29 13:50:22

标签: c++ arrays

我有以下数组:

int a1[] = {1,2,3,4,5,6};

我想知道如何在前面和后面添加任何数字。在JavaScript中,有unshift()和push()。在C ++中有类似的东西吗?

3 个答案:

答案 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;
}