C++ 具有非特定元素大小和元素数的向量
我想为某些类中的每个点定义一些任意属性,但之前没有定义属性的类型和数量。所以,我需要将它们存储在一个向量中,但我不知道如何定义向量,每个元素可以不是特定的大小,并且具有不同的字段数。课程安排如下:C++ 具有非特定元素大小和元素数的向量,c++,visual-c++,vector,properties,propertygrid,C++,Visual C++,Vector,Properties,Propertygrid,我想为某些类中的每个点定义一些任意属性,但之前没有定义属性的类型和数量。所以,我需要将它们存储在一个向量中,但我不知道如何定义向量,每个元素可以不是特定的大小,并且具有不同的字段数。课程安排如下: class UnstructuredMesh { std::vector<size_t> m_cellBegIndices; //!< Cell Beginning Indices std::vector<size_t> m_faceBegIn
class UnstructuredMesh
{
std::vector<size_t> m_cellBegIndices; //!< Cell Beginning Indices
std::vector<size_t> m_faceBegIndices; //!< Face Beginning Indices
std::vector<OSG::Pnt3f> m_points; //!< Points
std::vector<????, ????> m_pointProperties; //!< Point Properties
};
有人能帮我解决这个问题吗?好吧,考虑到我的评论,我想我会举一个我建议的例子。很难确切地知道您在做什么,但这假设您正在用某种需要执行不同操作的可执行组件填充向量 我看你已经解决了你的问题,但下面的内容可能会提供一个更容易理解的解决方案。显然,向量上的内存释放应该在实际应用程序中以更好的形式处理,并且不要忘记在现实生活中包含虚拟析构函数。但这是编译和运行的
#include "windows.h"
#include <tchar.h>
#include <vector>
#include <stdio.h>
class iface
{
public:
virtual void execute() = 0;
};
class do_stuff_A : public iface
{
private:
int A;
int B;
public:
do_stuff_A()
{
A = 1;
B = 2;
}
void execute() override
{
printf("\nA is %d, B is %d", A, B);
}
};
class do_stuff_B : public iface
{
private:
double A;
double B;
double C;
public:
do_stuff_B()
{
A = 1.1f;
B = 2.2f;
C = 3.2f;
}
void execute() override
{
printf("\nA is %f, B is %f, C is %f", A, B);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<iface*> my_vec;
my_vec.push_back(new do_stuff_A());
my_vec.push_back(new do_stuff_B());
my_vec[0]->execute();
my_vec[1]->execute();
Sleep(3000);
for (int i = 0; i < my_vec.size(); i++)
{
delete my_vec[i];
}
return 0;
}
使用例如or如何?@JoachimPileborg在我的问题中,我的意思是所有的向量元素都是相同的大小,但它们的大小之前没有确定,将在运行时确定,但我认为这一个用于它们的元素具有不同大小的向量。不是吗?在这种情况下,不可能使用std::vector,因为它在编译时需要包含的类型。您可以使用void*`和类型转换来实现,但它有一种糟糕的代码味道。另外,当你说大小是固定的,但在运行时,我猜你已经有了很多不同的结构,你只需要在程序运行时选择其中一个,这意味着你确实可以使用Boost或unions,或者,您可以使用std::string或std::vector或类似的方法来处理数据。在这一点上,您似乎需要定义一个可能的变体列表,然后设计一个好的接口/基类,该接口/基类可以扩展以满足所有可能的变体,尽管在实践中这是非常困难的。然后可以用指向基类类型项的指针填充向量。我想这就是你想做的对吗?小心破坏。@Ian是的!类似的东西。我只是想用一个浮点向量来解决这个问题。然后解析浮点数并根据属性的顺序填充变量。看起来很复杂,但它解决了我的问题。但是我必须为每个属性组合定义一个类,这在我的情况下是不可能的:除非你能为你想要添加到这个向量中的所有属性创建一个基类,并使属性本身成为类或结构。我看到过一个非常复杂的使用模板的实现,其中定义了从公共基类继承的数据类型,以便可以对它们执行公共操作。很多时候,我会选择更多的打字,使设计更明确,更不复杂,即使它创建了一个不那么优雅的应用程序。