我什么时候应该使用字典,列表或设置?
是否存在更适合每种数据类型的方案?
好吧,所以我最后一次以C++为生,std::auto_ptr所有的std lib都可用,而且boost::shared_ptr风靡一时.我从未真正研究过提供的其他智能指针类型.我知道C++ 11现在提供了一些类型的提升,但不是全部.
那么有人有一个简单的算法来确定何时使用哪个智能指针?优选地包括关于哑指针(诸如原始指针T*)和其他增强智能指针的建议.(像这样的东西会很棒).
有一个众所周知的图像(备忘单)称为"C++容器选择".这是为所需用途选择最佳容器的流程图.
有人知道是否已有C++ 11版本吗?
这是前一个:

我需要迭代std::queue.www.cplusplus.com说:
默认情况下,如果没有为特定队列类指定容器类,则使用标准容器类模板deque.
那么我可以以某种方式到达队列的底层deque并迭代它吗?
我从来没有用过std::list<T>自己.当我们已经拥有它时,我想知道人们何时使用它std::vector<T>就像具有连续内存的数组一样.std::vector当我们需要顺序容器时,它似乎是一个完美的选择
所以我的问题是
std::list过std::vector?为什么呢?std::vector过std::list?为什么?如果有性能考虑因素,请列出详细说明/信息.
如果可能,请引用一些参考资料,以支持您的答案.
在Smalltalk中,您可以创建一个sortedCollection,也就是说您可以添加一个元素,然后将其插入到正确的位置.
在C++中有这样的东西吗?或者甚至更好的是有类似sortedQueue的东西,这样当你添加一个元素时,它会将它排序成一个类似于结构的队列,你可以直接弹出第一个元素?
我查看了set,这是我在排序方面所需要的,但它是一个无序的集合.我正在寻找一个小的运行时间.
我有一个嵌套的for循环结构,现在我在每次迭代开始时重新声明向量:
void function (n1,n2,bound,etc){
for (int i=0; i<bound; i++){
vector< vector<long long> > vec(n1, vector<long long>(n2));
//about three more for-loops here
}
}
Run Code Online (Sandbox Code Playgroud)
这允许我在每次迭代时"重新开始",这很有效,因为我的内部操作主要是以vec [a] [b] + =某个值的形式.但我担心大n1或大n2的速度很慢.我不知道vector/arrays/etc的底层架构,所以我不确定处理这种情况的最快方法是什么.我应该使用数组吗?我应该以不同方式清除它吗 我应该完全不同地处理逻辑吗?
编辑:矢量的大小在技术上不会改变每次迭代(但它可能会根据函数参数而改变).我只是试图清除它/ etc,因此在所有其他情况下,程序的速度与人类一样快.
编辑:
我的不同方法的结果:
Timings (for a sample set of data):
reclaring vector method: 111623 ms
clearing/resizing method: 126451 ms
looping/setting to 0 method: 88686 ms
Run Code Online (Sandbox Code Playgroud) 使用迭代器循环STL映射与向量之间的性能差异是什么?我想使用map键进行插入,删除和一些访问,但我还需要定期访问map中的每个元素.