【问题标题】:Create an object ArrayList from a class从一个类创建一个对象 ArrayList
【发布时间】:2013-07-23 08:56:25
【问题描述】:

我想知道是否可以在 Visual Studio 2005 C++ 中创建一个类对象的 ArrayList。

我会有这门课:

class var
{
   int x;
   int y;
}

在 C# 中是这样的:ArrayList<var> list = new ArrayList<var>();,但在 C++ 中不起作用。

我忘了提到该项目是一个Windows 窗体应用程序

【问题讨论】:

  • 你的意思是std::vector
  • Offtopic:var 是 VS2005 C++ 中的有效变量名吗?
  • 也许,名字类不会是那个,我只是举个例子
  • FSou1,他定义了自己的类“var”;)

标签: c# c++ object arraylist visual-studio-2005


【解决方案1】:

你试过std::vector<var> myVectorstd::list<var> myList吗?

【讨论】:

  • std::list 可能不是我们想要的。这是完全不同的,std::vector 是应该使用的,除非证明你需要它。
  • @chris 我知道std::liststd::vector 完全不同,但我只是想指出拥有一组 var 类型对象的可能性。
  • 我忘了说这个项目是一个 Windows 窗体应用程序,我的 std 有错误,我需要使用命名空间或库吗?
  • 你必须选择#include <vector>using namespace std;
  • 现在可以工作了,但是现在我如何在向量中添加一个 var 对象以及如何显示她?
【解决方案2】:

这应该可以完成工作:

#include <vector>

using std::vector;

class var
{
   int x;
   int y;
};

int main(void)
{
    vector<var> myVec(10); // creates a vector of 10 elements of var objects

    // ... other stuff

    return 0;
}

但是还有很多方法可以将对象放入向量中,例如创建一个空向量并使用vector::push_back() 等。您应该阅读标准库的文档以了解所有替代方案。

【讨论】:

  • 为什么不用对象数组,为什么要使用向量>
  • 我忘了说这个项目是一个Windows Form Application,我没有找到命名空间std。
  • @Subhajit 正如我在上一段中指出的那样:还有更多解决方案。使用简单数组将您在运行时和堆栈中限制为固定大小。如果这足够了,则可以使用它。但是,一旦数组大小需要是动态的,或者总数据的大小将超过堆栈空间,向量或其亲属之一就是要走的路。
【解决方案3】:

你可以这样做:

var myArray[50];

堆栈中有 50 个变量。你也可以这样做:

var* myArray = new var[50];

堆上有 50 个变量。或者你可以只使用 std::vector:

var myObject;
std::vector <var> myVector;
myVector.push_back(var);

或者,我通常使用的最后一个是:

std::vector <var*> myVector;
var* pVar = new var();
myVector.push_back(pVar);

方法太多了,这只是其中的一小部分。

【讨论】:

  • 不必要地使用指针向量是相当少的point。现在你必须担心清理它。
  • std::vector&lt;std::unique_ptr&lt;Base&gt;&gt;。不再需要清理或担心异常。
  • 我使用最后一个并且可以工作,但是现在我如何在向量中添加一个 var 对象以及如何显示她?
  • 我编辑了我的答案,它显示了如何添加指向对象的指针。然后访问它,它与您通常使用向量相同,但您使用 -> 而不是 .因为它是一个指针。
  • 例如,从技术上讲,您可以说 myVector[0]->x = 5;前提是 myVector[0] 是一个有效的指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多