如何在constexpr函数中使用reverse_iterator

问题描述 投票:0回答:1

我有一个通过常量引用传递给我的std::vector<uint64_t>函数的预填充constexpr和另一个我要通过引用传递给我的std::vector<uint64_t>并填充值的方法。

我想计算下面collection向量中每个元素之间的距离,并将结果存储到distances向量中。换句话说,我想将索引1的值减去索引0的值,然后将其存储到另一个向量中,依此类推。

我曾考虑使用reverse_iteratorconst_reverse_iterator来帮助完成此过程...

constexpr void euclidean_distance(const std::vector<uint64_t>& collection, std::vector<uint64_t> distances ) {
    auto It1 = collection.rend();   // fails to compile
    auto It2 = collection.crend();  // fails to compile

    // ... code to do the calculation...
}

但是,在Visual Studio 2017中,这两个都不是文字类型,因此都无法编译...

要实现类似的功能,我必须选择哪些选项?

c++ iterator c++17 constexpr const-iterator
1个回答
1
投票

这里有太多问题,我无法确定是哪个问题...

在C ++中,constexpr表示值必须在编译时可用。 const,另一方面,则意味着数据不可更改。

这里不要使用constexpr。这没有道理。实际上,即使让函数返回const也没有意义! void函数不会返回任何内容,并且在任何情况下都不应由const或constexpr限定。 constexpr函数用于需要在编译时评估原始数据类型(即int,float,char)之间的计算,并且输入也必须为constexpr的情况。

primes不在这里,顺便说一句...是错字?

顺便说一句,您不应该将.crend()初始化为任何东西。您应该改用.crbegin()。

const std::vector<uint64_t>&不是const引用,它是对const向量的引用。从技术上讲,所有参考文献都是常量...

© www.soinside.com 2019 - 2024. All rights reserved.