转换嵌套 stl 容器内的值

Converting values inside nested stl containers

提问人:Bubaya 提问时间:11/2/2023 最后编辑:Bubaya 更新时间:11/2/2023 访问量:62

问:

我的全部观点是,我有一个

struct S {
  double x, y;
  // some code defining properties and operations on such pairs.
  // ...
  // ... 
  operator std::pair<double, double>(){
    return {x,y};
  }
};

出于语义原因,并且为了能够在其中定义所有这些属性和操作,我选择不使用和几个全局函数。现在这让我头疼:出于某种原因,我需要转换一个Sstd::pair<double, double>

std::vector<std::array<std::vector<S>, 3>>

到 a

std::vector<std::array<std::vector<std::pair<double, double>>, 3>>

我知道我可以通过说 a 转换为 a。然而,在这种嵌套的情况下,我的印象是这变得笨拙。vector<T> vvector<U>vector<U>(v.begin(), v.end()

还有其他选择吗?还是我应该重新考虑整个方法?

C++ 转换 STL

评论

0赞 Bubaya 11/2/2023
@463035818_is_not_an_ai Nexted 的意义上,我在向量内有 S 在向量内数组中。我现在不打算在这里应用你提到的一般情况。
0赞 463035818_is_not_an_ai 11/2/2023
顺便说一句,免费函数通常比在类中放置尽可能多的函数更受欢迎。要让事物位于它们所属的位置,您将使用命名空间
0赞 Bubaya 11/2/2023
@463035818_is_not_an_ai 是的,但现在为现有代码重构它绝对不是首选方法。不过,我将来会牢记这一点。
1赞 463035818_is_not_an_ai 11/2/2023
元素位于向量内部这一事实在某种程度上是次要的。首先,您需要决定如何从 .最好的解决方案是首先不要进行此转换。在泛型代码中,没有必要这样做,您将使用迭代器,并且您的将有一个 and 成员std::array<std::pair<double, double>, 3>std::array<std::vector<S>, 3>Sfirstsecond
5赞 Some programmer dude 11/2/2023
与您要问的问题无关,但更多的是对你的设计的评论:我建议不要使用这种隐式转换运算符,而是显式使用带有转换 lambda 的 std::transform。隐式转换运算符往往会在最不预期和最糟糕的情况下返回并使用。

答: 暂无答案