iota
函数以前位于<algorithm>
标题中。它已改为<numeric>
。
我需要保持旧的方式以实现向后兼容性,因此我想使用预处理器选项来选择要包含的正确标头。
这是什么时候改变了,我应该使用哪个预处理器选项?
答案 0 :(得分:4)
iota
永远不会被移动&#34;来自<algorithm>
。 C ++ 03在任何头文件中都没有std::iota
,并且没有符合要求的实现可以提供它,因为iota
不是保留名称,这需要工作:
#define iota arbitrary preprocessing token sequence like this and *that and "!" and \
-13833rfa231fn7or.other.line.noise.that.happens.to.be.a.pp.number
#include <every-standard-header-here>
它已添加到C ++ 11中的<numeric>
,并作为扩展程序位于the SGI STL <numeric>
中。它从未进入过<algorithm>
,因此无法从中移除。
现在,由于允许标准库标题以任意方式相互包含,因此C ++ 11模式中的GCC&lt; = 5&#39; <algorithm>
包含<random>
偶然事件,其中包括<numeric>
偶然事件。这仅仅是您不应该依赖的实施细节,GCC 6不再这样做。解决这个问题的方法是简单地包含正确的标题,这个标题一直是<numeric>
。
答案 1 :(得分:1)
<numeric>
到达#if __cplusplus <= 199711L
#include <algorithm>
#else
#include <numeric>
#endif
后被重新引入。因此,检查您是否在没有它的环境中,并包括旧标头,否则,请包含新标头。
这样的事情可能会起到作用:
__cplusplus
ref将201103L
的值设置为__cplusplus
。声称完全符合2011年标准;它没有告诉你部分一致性或编译器扩展。如果std::iota
设置为201103L,则编译器完全符合或对您说谎。如果不是,那么你无法确定它支持哪些功能。
详细了解c++11。
此外,这个Quora answer也同意$ pip install -U memory_profiler
发生mprof run --help
Usage: mprof run [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
--python Activates extra features when the profiling executable
is a Python program (currently: function
timestamping.)
--nopython Disables extra features when the profiled executable
is a Python program (currently: function
timestamping.)
-T INTERVAL, --interval=INTERVAL
Sampling period (in seconds), defaults to 0.1
-C, --include-children
Monitors forked processes as well (sum up all process
memory)
-M, --multiprocess Monitors forked processes creating individual plots
for each child
的变化(或诚实;重新介绍)。
如果你负担得起,只需要包括两个库。
答案 2 :(得分:1)
您要做的是检查__cplusplus
变量是否低于某一点,如果不是#include <algorithm>
,则#include <numeric>
#if __cplusplus <= 199711L
#include <algorithm>
#else
#include <numeric>
#endif
这应该适用于您需要执行此操作的任何库,只需注意您可能必须将199711L
更改为适当的数字。