所以我有一个“大”类A,另一个类B将包含至少 100 个对象的向量A。B将类中的所有对象存储为a 似乎不是一个好主意,vector<A>因为可以重用很多信息。
我正在考虑在类中有一个模板,B它包含所有相似的属性,A然后创建一个vector<A*>。但这使他们都一样...
那么有没有一种方法可以存储类的相似变量,以便只需要多次存储少数差异?
最小的工作示例
#include <iostream>
// suppose an int is big:
struct A { // create struct which holds 3 ints
A() : a(0),b(0),c(0) {} //ctor
void print() { // print all variables
cout << a << ", " << b << ", " << c << endl;
}
int a,b,c;
};
class B { // create object that holds a vector of A
public:
B(int vectorSize) {
vector_A.resize(vectorSize);
vector_ptr_A.resize(vectorSize);
}
void initValues() {
///////////////////////////////////////
// METHOD 1
vector_A.resize(vectorSize); // resize
for (int i=0; i<vector_A.size(); ++i) {
vector_A[i].a = rand() % 100; // randomize A::a
vector_A[i].b = 5; // only B wants A::b to be 5
vector_A[i].c = 10; // only B wants A::c to be 10
}
///////////////////////////////////////
///////////////////////////////////////
// METHOD 2
A_template.b = 5; // only B wants A::b to be 5
A_template.c = 10; // only B wants A::c to be 10
vector_ptr_A.resize(vectorSize,&A_template); // point to template
for (int i=0; i<vector_ptr_A.size(); ++i) {
vector_A[i].a = rand() % 100; // randomize A::a
}
///////////////////////////////////////
}
void print1() { // prints vector_A[i]
for (int i = 0; i < vector_A.size(); ++i) {
vector_A[i].print();
}
}
void print2() { // prints vector_ptr_A[i]
for (int i=0; i < vector_ptr_A.size(); ++i) {
vector_ptr_A[i]->print();
}
}
// method 1
vector<A> vector_A; // a big, big vector
// method 2
A A_template;
vector<A*> vector_ptr_A; // all the same
};
int main() {
srand( time(NULL) );
B b(10);
b.initValues();
cout << "METHOD 1\n";
b.print1(); // as desired, but inefficient
cout << "\nMETHOD 2\n";
b.print2(); // all the same output
}
编辑
一些澄清,因为最小的工作示例有点令人困惑。我现在也对其进行了调整以使其更加清晰。
类的成员A是由B用户设置的。例如,用户将为A::a向量的每个元素(由随机数表示)定义,而其他 2 个(A::b和A::c)由 定义B。类A不仅是由 使用的类B,还由用户或任何其他类使用。
所以基本上我要求一种方法,所以我不必为向量的每个元素设置A::b和,而只需要一次。对于我应该设置的每个元素都是不同的。A::cA::a
为了说明我想要这个的原因:类A在我的程序中是一个Sprite类,并且B必须能够将精灵打印为图块并命名为TileMap. 因此,向量中TileMap的很多Sprites 都可以在窗口上绘制,但是对于所有这些图块(纹理图块大小、绘图图块大小、纹理文件等),很多信息都是完全相同的,而我没有想要为每个图块设置所有这些变量。我想创建某种模板,可用于Sprite向量中的每一个。这种方式不仅更容易,占用空间更少,而且更安全:我知道所有这些值将完全相同。