簡體   English   中英

在類C ++中定義一個int數組

[英]Defining an int array in a class C++

有沒有辦法動態地(我認為這是正確的術語)在一個類中定義一個int數組,該數組的大小是同一類中的私有成員變量? 例如:

class Scene()
{
    //public member functions

    private:

        int max;
        int xcoords[max];
 }

我在這里搜索了其他已回答的問題,但是我還沒有學會如何在課堂上使用向量,這是大多數回答所建議的。 理想情況下,在類的構造函數中,將傳遞一個int max值,然后使用該值將xcoord數組初始化為max大小,且所有條目均為-1。

如果要動態調整成員數據的大小,幾乎可以肯定必須將其存儲在堆中。 意思是這樣的

class Foo{
  int* data;
public:
  Foo(int size){
    data = new int[size];
  }
  ~Foo(){
    // remember to clean up
    delete[] data;
  }
}

這樣,您的構造函數將在創建類時為堆int中的size int分配大小,並在刪除類時釋放它。


構造函數的更正式的c++編寫方式是:

  Foo(int size):
    data(new int[size])
  {
  }

但最終它將做同樣的事情。

考慮將內存管理留給標准庫。 使用向量代替數組。

#include <vector>
#include <iostream>

using std::vector;
using std::cout;
using std::endl;

class Scene
{
public:
    vector<int> verticeData;
};

int LEGACY_FUNCTION(const int * data, int count)
{
    for (int i = 0; i < count; ++i)
    {
        cout << " ";
        cout << data[i];
        cout << " ";

    }
    cout << endl;
    return 0;
}

int main()
{
    Scene myscene;
    myscene.verticeData.emplace_back(3);
    myscene.verticeData.emplace_back(4);
    myscene.verticeData.emplace_back(5);

    LEGACY_FUNCTION(myscene.verticeData.data(), myscene.verticeData.size());

    myscene.verticeData.clear();
    myscene.verticeData.emplace_back(1);
    myscene.verticeData.emplace_back(7);

    LEGACY_FUNCTION(myscene.verticeData.data(), myscene.verticeData.size());

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM