在C ++中存储未知大小的表

时间:2012-12-23 16:48:47

标签: c++ gcc

我想用C ++(gcc)存储一个表,其大小我以前不知道它将在实时决定使用哪种结构?

5 个答案:

答案 0 :(得分:3)

制作用于表中记录的结构的向量:

vector<MyRecord> v;

使用以下方法添加记录(MyRecord类型的对象):

v.push_back(record);

答案 1 :(得分:1)

如果您的意思是大多数目的std::vectorstd::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具有恒定长度(性能,内存占用,内存对齐)的优势,在此解决方案中,您可以获得与关系数据库相同的灵活性。