有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.
(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).
C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.
(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.
我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?
inline void add(const DataStruct& rhs) {
using namespace boost::assign;
vec.reserve(vec.size() + 3);
vec += rhs.a, rhs.b, rhs.c;
}
Run Code Online (Sandbox Code Playgroud)
上述功能是为约17000倍执行,其执行(据我可以看到.有一些改造涉及)约2个数量级更差与调用载体::储备.
我总是认为保留可以加速push_back,即使是小值,但这似乎不正确,我找不到任何明显的原因,为什么它不应该这样.保留是否会阻止功能的内联?对size()的调用是否过于昂贵?这取决于平台吗?我会尝试编写一些小基准来在干净的环境中确认这一点.
编译器:gcc (GCC) 4.4.2使用-g -O2
我有一个
vector< pair<vector<double> , int>> samples;
Run Code Online (Sandbox Code Playgroud)
该向量将包含许多元素.为了效率rason我以这种方式初始化它:
vector< pair<vector<double> , int>> samples(1000000);
Run Code Online (Sandbox Code Playgroud)
我从另一个容器中预先知道了(不是编译时)的大小.问题是我必须减少1个元素的向量维度.实际上,这种情况不是问题,因为调整尺寸小于初始没有重新分配.我可以这样做
samples.resize(999999);
问题是在某些情况下,而不是减少1个元素的维度,我必须增加元素的维度.如果我做
samples.resize(1000001);
Run Code Online (Sandbox Code Playgroud)
存在重新分配的风险,我希望避免效率rasons.我问是否可能解决我的问题是这样的:
vector< pair<vector<double> , int> samples;
samples.reserve(1000001);
samples.resize(1000000);
.
. Elaboration that fill samples
.
samples.resize(1000001); //here I don't want reallocation
Run Code Online (Sandbox Code Playgroud)
或者如果有更好的解决方案?提前致谢!
(我正在使用C++ 11编译器)