gpt4 book ai didi

c++ - C++ 中的 "
转载 作者:IT老高 更新时间:2023-10-28 21:35:10 26 4
gpt4 key购买 nike

我遇到了以下代码 here ,它来自使用邻接矩阵的 Dijkstra 算法的 C++ 实现。

//read in edges keeping only the minimum
for(int i=0; i<E; i++) {
int v1,v2,tmp;
fin >> v1; fin >> v2;
fin >> tmp;
adjmat[v1][v2]<?=tmp; // <?= sets left to min(left,right)
adjmat[v2][v1]<?=tmp;
}

注意最后两行,应用运算符 <?= 。正如所评论的那样,以下行

adjmat[v1][v2]<?=tmp; // <?= sets left to min(left,right)

将设置 leftmin(left,right) .

我以前从未见过这个运算符。我在VS中尝试了代码,它无法编译。它是什么?怎么设置left成为 min(left,right) ?

最佳答案

这是一个旧的 GCC extension ;它按照评论中所说的去做(它是“最小”运算符的复合赋值形式)。这不是标准的 C++。

a = a < b ? a : b 的区别和 a <?= b是后者只对每个操作数求值一次。


在现代标准 C++ 中,我相信您可以像这样编写“分配最小值”算法:

auto && __a = a;
auto && __b = b;
if (!(__a < __b)) { __a = std::forward<decltype(__b)>(__b); }

这应该是具有 a <?= b 效果的宏的主体。 , 和 ab是任意表达式,可能有副作用。或者您可以将其包装到模板中:

template <typename T,
typename U,
typename P = std::less<std::common_type_t<std::decay_t<T>, std::decay_t<U>>>
T && clamp_to_minimum(T && a, U && b, P p = P())
{
if (!(p(a, b))) { a = std::forward<U>(b); }
return std::forward<T>(a);
}

关于c++ - C++ 中的 "<?="运算符是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814336/

26 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com