我是一位有用的助手,可以帮助您翻译文本。
我有一个std::vector需要经常循环。 我看到两种方法可以做到:
第一种方法:
第二种方式:
第一种实现比第二种更有效,或者现代编译器知道如何优化第二种实现,使其与第一种一样有效吗?
顺便说一下,我在使用Visual Studio 2013。
我有一个std::vector需要经常循环。 我看到两种方法可以做到:
第一种方法:
const size_t SIZE = myVec.size();
for (size_t i = 0; i < SIZE; i++)
{
myVec[i] = 0;
}
第二种方式:
for (size_t i = 0; i < myVec.size(); i++)
{
myVec[i] = 0;
}
第一种实现比第二种更有效,或者现代编译器知道如何优化第二种实现,使其与第一种一样有效吗?
顺便说一下,我在使用Visual Studio 2013。
for (auto & x : myVec) x = 0;
这种方式呢?或者使用std::fill(myVec.begin(), myVec.end(), 0)
? - Mike Seymourstd::fill
或std::fill_n
的工作。 - Jerry Coffinstd::generate
жҲ–std::generate_n
гҖӮstd::generate(myVec.begin(), myVec.end(), [=]{ return a+b*c+d*e/f; });
- Jerry Coffin[&]{/* ... */}
(当然,你只能使用为它们定义的语法,所以a+b
不会起作用,除非你在某个地方定义了它)。 - Jerry Coffin