我有一个通过常量引用传递给我的std::vector<uint64_t>
函数的预填充constexpr
和另一个我要通过引用传递给我的std::vector<uint64_t>
并填充值的方法。
我想计算下面collection
向量中每个元素之间的距离,并将结果存储到distances
向量中。换句话说,我想将索引1的值减去索引0的值,然后将其存储到另一个向量中,依此类推。
我曾考虑使用reverse_iterator
或const_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 ++中,constexpr表示值必须在编译时可用。 const,另一方面,则意味着数据不可更改。
这里不要使用constexpr。这没有道理。实际上,即使让函数返回const也没有意义! void函数不会返回任何内容,并且在任何情况下都不应由const或constexpr限定。 constexpr函数用于需要在编译时评估原始数据类型(即int,float,char)之间的计算,并且输入也必须为constexpr的情况。
primes
不在这里,顺便说一句...是错字?
顺便说一句,您不应该将.crend()初始化为任何东西。您应该改用.crbegin()。
const std::vector<uint64_t>&
不是const引用,它是对const向量的引用。从技术上讲,所有参考文献都是常量...