我有一个 std::list<double> foo;
我正在使用
if (foo.size() >= 2){
double penultimate = *(--foo.rbegin());
}
Run Code Online (Sandbox Code Playgroud)
但这总是给我任意的价值penultimate.
我究竟做错了什么?
假设我有这个代码:
int main(void)
{
int i = rand();
if (++i) ++i;
return i;
}
Run Code Online (Sandbox Code Playgroud)
这里定义的行为是什么?我知道这i = ++i是未定义的,第二行main包含类似的东西.该rand()呼叫在那里阻止优化了什么,我认为是有问题的行的编译器.
我正在使用 Boost 将“01-Jan-2000”形式的日期转换为儒略数。我这样做的方法是使用
int toJulian(std::string date)
{
std::locale loc = std::locale(std::locale::classic(), new boost::posix_time::time_input_facet("%d-%b-%Y"));
std::istringstream ss(date);
ss.imbue(loc);
boost::posix_time::ptime p;
ss >> p;
return p.date().julian_day();
}
Run Code Online (Sandbox Code Playgroud)
(这与 Boost 文档中的示例一致)。
但我不清楚这是否会泄漏内存。我没有明确的delete。显然,如果imbue将指针的所有权传递给loc流,那么当ss超出范围时它可能会被删除。
我对么?
请参阅http://www.boost.org/doc/libs/1_43_0/doc/html/date_time/date_time_io.html#date_time.format_flags
我正在查看一些遗留代码,它们定义了沿轴的一些网格点f.
int main(){
double f[9];
int i = 0;
for (double a = 0; a <= 1; a += 0.125){
f[i++] = a;
}
}
Run Code Online (Sandbox Code Playgroud)
我担心重复添加1/8到a,并且循环没有正确运行.这是因为我认为你不能像这样添加浮点值,并且当它i是8 时它依赖于它正好是1 .
或者这段代码好吗,我应该不再担心了吗?(该代码显然至少已有20年历史,并且从未造成过麻烦 - 尽管在原始版本中,double a已经在循环之外声明,但我正在阅读为什么会这样.).
我有一个std::vector<bool>实例(foo比方说),我需要编写一个函数,true如果所有元素都返回true.
我用
return *std::min_element(foo.begin(), foo.end());
Run Code Online (Sandbox Code Playgroud)
实现这一点,但这让我想到:false如果容器包含至少一个false值,你知道最小元素.换句话说,您不需要遍历整个容器end(),这意味着专业化std::min_element是合适的,就像专业化std::vector<bool>被认为是合适的.
我错过了什么吗?或者这会被视为过早的优化?也许一个好的编译器无论如何都会解决它.