【问题标题】:How can I add elements to a non-fixed size array in C++?如何在 C++ 中将元素添加到非固定大小的数组?
【发布时间】:2020-01-25 07:33:34
【问题描述】:

如果可能,请告诉我如何将元素添加到非固定大小的数组中!
这是我的代码:

#include <iostream>
#include "../Headers/print.h"
#include <string>

using namespace std;

int cells[] = {0};


我想在cells 中添加更多元素,但我没有找到答案,而且我尝试过的一切都不起作用......
谢谢!

【问题讨论】:

  • 所有数组都是固定大小的。即使看起来你没有给这个数组指定大小,但你确实做到了。大小是从初始化程序中推断出来的。 cells 是一个int[1],你不能改变它的大小,因为那会改变它的类型。使用不是数组的东西。
  • 这个问题的 C++ 解决方案是 std::vector。如果出于某种原因你想使用普通的 C 数组,请使用指针和 realloc。
  • 这能回答你的问题吗? How to create a dynamic array of integers

标签: c++


【解决方案1】:

如何在 C++ 中向非固定大小的数组添加元素?

首先,数组的大小是固定的。当你像这样初始化一个数组时,你可以跳过指定大小,

int cells[] = {0};

数组的大小由编译器自动推断。

如果您想要动态大小的数组,请使用 vector。示例见下面的代码,

#include <iostream>
#include <vector>
int main(){
    int cells1[] = {0}, cells2[] = {0,1,2,3,4,5};
    std::cout<<"Size of cells1 array: "<<sizeof(cells1)/sizeof(cells1[0])<<std::endl; // 1
    std::cout<<"Size of cells2 array: "<<sizeof(cells2)/sizeof(cells2[0])<<std::endl; // 6
    std::vector<int> cells3{0}; // Vector - a dynamic array
    std::cout<<"Size of cells3 vector: "<<cells3.size()<<std::endl; // 1
    cells3.push_back(1); // Append an element to the end of vector
    std::cout<<"Size of cells3 vector: "<<cells3.size()<<std::endl; // 2
    return 0;
}

输出

Size of cells1 array: 1
Size of cells2 array: 6
Size of cells3 vector: 1
Size of cells3 vector: 2

【讨论】:

    【解决方案2】:

    您可以获得对第一个元素的引用 &cells[0] 添加到此元素数量乘以它们的大小 + 1 * sizeof(int) 这样您将获得数组后第一个字节的地址。 然后您可以使用以下地址在此地址分配内存:https://stackoverflow.com/a/19103230/11685627 分配 sizeof(int)*no 个元素。比您应该能够使用您的数组,因为它的大小已扩展。请记住在数组超出块范围后“释放”内存。 https://docs.microsoft.com/en-gb/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc?redirectedfrom=MSDN https://docs.microsoft.com/en-gb/windows/win32/api/memoryapi/nf-memoryapi-virtualfree Ofc 这是明确的困难方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-09
      • 2013-09-07
      • 2020-03-13
      • 2010-10-19
      • 2019-08-01
      • 2013-11-30
      • 2014-10-13
      • 1970-01-01
      相关资源
      最近更新 更多