据我所知,如果向量的顺序不重要,使用<Target AfterTargets="AfterBuild">
<Exec Command="$(ProjectDir)$(OutputPath)$(AssemblyName).$(OutputType)" />
<Copy SourceFiles="$(ProjectDir)$(OutputPath)file.db" DestinationFolder="$(SolutionDir)Test" />
</Target>
- swap
惯用法从{{移除单项会更快1}}。例如:
pop_back
上一个示例避免复制许多元素。
从同样的角度来看,如果我想在代表std::vector
的最后auto it = std::find(my_vec.begin(),my_vec.end(),SOME_VALUE);
std::swap(*it,my_vector.back());
my_vector.pop_back();
项的范围内调用std::vector::erase
,它是否会被优化并且表现得像多n
1}}?
示例:
std::vector
答案 0 :(得分:5)
如果我在代表
std::vector::erase
的最后n项的范围内调用std::vector
,是否会进行优化并且表现得像多pop_back
?
如果我理解你的话,请认为这里的担心不应该是任何重置操作,如中间的擦除。如果是这种情况,standard guarantees(强调我的):
复杂性
第一个和最后一个之间距离的线性,加上容器的最后一个和最后一个距离的线性。
强调部分用于重新安置。但是,由于这是零,因此从背面移除元素不会产生任何费用。
值得做的是反汇编某些此类代码的优化输出,看看这是否只是工具链中的指针赋值/减量操作。
答案 1 :(得分:1)
据我所知,如果向量的顺序不重要,使用swap-pop_back成语从std :: vector中删除会更快。
不确定你的意思。涉及多次回拨的任何事情都不可能是最佳的。
从同样的角度来看,如果我在一个代表std :: vector的最后n项的范围内调用std :: vector :: erase,那么它会被优化吗
这取决于库的实现,但几乎可以肯定。
并且表现得像多个pop_back?
没有