【问题标题】:std::tuple vs std::array as items of a std::vectorstd::tuple vs std::array 作为 std::vector 的项目
【发布时间】:2016-06-15 02:01:45
【问题描述】:

我有这种情况:

std::vector<4_integers> v;

这里最适合什么?

std::tuple解决方案:

std::vector<std::tuple<int,int,int,int>> v;

std::array解决方案:

std::vector<std::array<int,4>> v;

为什么?

编辑(用例):

很抱歉之前没有提及。我将按如下方式使用它:

for(const auto& item:v){
   some_function(item[0],item[1],item[2],item[3]); // or tuple equivalent 
}

当然,我需要将它们存储起来,因为计算 4 个整数并不是我想要一次又一次地重复的事情。

【问题讨论】:

  • 两者都可以解决一些问题...现在这一切都取决于您面临的什么具体问题。请注意,并非所有问题都相等,就像所有解决方案都不相等一样。
  • 取决于您将如何使用它们。
  • 添加了用例。谢谢

标签: c++ arrays c++11 vector tuples


【解决方案1】:

对于这种特殊情况,我不得不不同意 cmets。对于同类容器 - 就像这里的情况(所有 ints) - array 更胜一筹。

当查看std::tuplestd::array 的界面时,很明显后者是一个容器(例如带有迭代器),而前者不是。这意味着标准库的其余部分将更自然地适用于后者。

如果类型不是同质的,就不会有问题 - 它必须是std::tuple

【讨论】:

  • 当他还没有告诉我们他试图解决什么问题时,你对 OP 的用例做了很多假设。据我们所知,他可能有数千行基于std::tuple 的代码要与之交互。或者元组中的 ints 实际上可能来自单独的模板参数,这些参数恰好在一种特定情况下是相等的。
  • 这些类型可能是偶然的(这激发了我的回答)
  • 是的,你都对——答案假设类型是同质的,具有一定的意义。好点子。
【解决方案2】:

这在很大程度上取决于用例,但如果元素有某种关联,我会选择array。您可以遍历数组并使用标准算法。

我通常认为 tuple 可以替代您可以用 struct 替换的东西,例如:

struct fourIntegers{
  int int1;
  int int2;
  int int3;
  int int4;
};

有时tuple 比新的struct 更紧凑/清晰。

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多