相关疑难解决方法(0)

"STL"和"C++标准库"之间有什么区别?

有人把这篇文章给我的注意,声称(我意译)的STL长期被误指整个C++标准库,而不是从SGI STL中采取的部分.

(...)它指的是"STL",尽管很少有人仍然使用STL(在SGI设计).

C++标准库的一部分基于STL的一部分,正是这些部分,许多人(包括几位作者和臭名昭着的错误记录的cplusplus.com)仍然称为"STL".但是,这是不准确的; 事实上,C++标准从未提及"STL",两者之间存在内容差异.

(...)"STL"很少用于指代恰好基于SGI STL的stdlib的位.人们认为这是整个标准库.它被放在简历上.这是误导.

我几乎不了解C++的历史,所以我不能判断文章的正确性.我应该避免使用术语STL吗?或者这是一个孤立的意见?

c++ stl std c++-faq c++-standard-library

432
推荐指数
5
解决办法
9万
查看次数

std :: vector :: reserve性能惩罚

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

c++ performance stl stdvector

6
推荐指数
4
解决办法
4847
查看次数

当向量的维度必须递增时,避免重新分配向量

我有一个

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编译器)

c++ c++11

1
推荐指数
1
解决办法
232
查看次数

标签 统计

c++ ×3

stl ×2

c++-faq ×1

c++-standard-library ×1

c++11 ×1

performance ×1

std ×1

stdvector ×1