我想用C ++(gcc)存储一个表,其大小我以前不知道它将在实时决定使用哪种结构?
答案 0 :(得分:3)
制作用于表中记录的结构的向量:
vector<MyRecord> v;
使用以下方法添加记录(MyRecord类型的对象):
v.push_back(record);
答案 1 :(得分:1)
如果您的意思是大多数目的std::vector
或std::deque
正在寻找的数组。
std::vector<ClassOrTypeYouNeedToStore> v;
v.push_back(1):
v.push_back(2):
v.push_back(3):
std::cout << "Length of vector " << v.size() << std::endl;
// Before C++11
for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++) {
std::cout << "Next element is " << *it << std::endl;
}
// C++11+
for (auto it = v.begin(); it != v.end(); it++) {
std::cout << "Next element is " << *it << std::endl;
}
答案 2 :(得分:1)
这取决于您需要存储的内容以及变化的内容。如果列是固定的并且具有不同的类型,并且您希望能够动态插入和删除行,则可能需要std::vector<std::tuple<T,U,V>>
(或者代替tuple
,您可以使用某种类型的结构)。
如果列已修复但类型相同,请提供std::vector<std::array<T,N>>
a。
如果行数和列数固定且类型相同,请尝试std::array<std::array<T,N>,M>
。
如果行数和列数是固定的,但每列的类型不同,std::array<std::tuple<T,U,V>,N>
应该适合您。
如果您希望列数也有所不同,那么您希望内部类型为某种std::vector
。
答案 3 :(得分:0)
通常在这种情况下我会使用std::vector
。
size_t rsz = 4;
size_t csz = 4;
std::vector<double> table(rsz*csz, 0.0);
for (size_t i = 0; i < rsz; i++) {
for (size_t j = 0; j < csz; j++) {
table[i*csz+j] = i * 10 + j;
}
}
我倾向于选择1D向量而只是自己做偏移算法。它可以防止你的帮助函数被过度专业化。
答案 4 :(得分:0)
根据建议,您可以使用vector<vector<CellType>>
,vector<RowType>
,或者,如果按“尺寸”表示您可以使用vector<array<RowSize, CellType>>
(我最喜欢的解决方案)的“行数”。
Arrays具有恒定长度(性能,内存占用,内存对齐)的优势,在此解决方案中,您可以获得与关系数据库相同的灵活性。