相关疑难解决方法(0)

在Python中,何时使用Dictionary,List或Set?

我什么时候应该使用字典,列表或设置?

是否存在更适合每种数据类型的方案?

python dictionary list set data-structures

280
推荐指数
7
解决办法
16万
查看次数

我什么时候使用哪种指针?

好吧,所以我最后一次以C++为生,std::auto_ptr所有的std lib都可用,而且boost::shared_ptr风靡一时.我从未真正研究过提供的其他智能指针类型.我知道C++ 11现在提供了一些类型的提升,但不是全部.

那么有人有一个简单的算法来确定何时使用哪个智能指针?优选地包括关于哑指针(诸如原始指针T*)和其他增强智能指针的建议.(像这样的东西会很棒).

c++ pointers smart-pointers c++-faq c++11

224
推荐指数
4
解决办法
3万
查看次数

如何在C++ 11中有效地选择标准库容器?

有一个众所周知的图像(备忘单)称为"C++容器选择".这是为所需用途选择最佳容器的流程图.

有人知道是否已有C++ 11版本吗?

这是前一个: eC++容器选择

c++ c++-faq c++11

131
推荐指数
3
解决办法
1万
查看次数

std :: queue iteration

我需要迭代std::queue.www.cplusplus.com说:

默认情况下,如果没有为特定队列类指定容器类,则使用标准容器类模板deque.

那么我可以以某种方式到达队列的底层deque并迭代它吗?

c++ iteration queue c++-standard-library

67
推荐指数
5
解决办法
12万
查看次数

你什么时候喜欢使用std :: list <T>而不是std :: vector <T>?

我从来没有用过std::list<T>自己.当我们已经拥有它时,我想知道人们何时使用它std::vector<T>就像具有连续内存的数组一样.std::vector当我们需要顺序容器时,它似乎是一个完美的选择

所以我的问题是

  • 究竟什么时候喜欢 std::liststd::vector?为什么呢?
  • 你什么时候喜欢 std::vectorstd::list?为什么?

如果有性能考虑因素,请列出详细说明/信息.

如果可能,请引用一些参考资料,以支持您的答案.

c++ containers stl

27
推荐指数
4
解决办法
6073
查看次数

C++容器的一般用例

C++标准库容器的一般用例是什么?

  • 位集合
  • 双端队列
  • 名单
  • 地图
  • 多重映射
  • 多集
  • priority_queue
  • 队列
  • 向量

例如,对于配对搜索,地图通常更好.

c++ containers stl

26
推荐指数
2
解决办法
7036
查看次数

C++中是否有任何Sorted Collections?

在Smalltalk中,您可以创建一个sortedCollection,也就是说您可以添加一个元素,然后将其插入到正确的位置.

在C++中有这样的东西吗?或者甚至更好的是有类似sortedQueue的东西,这样当你添加一个元素时,它会将它排序成一个类似于结构的队列,你可以直接弹出第一个元素?

我查看了set,​​这是我在排序方面所需要的,但它是一个无序的集合.我正在寻找一个小的运行时间.

c++ sorting boost stl adt

19
推荐指数
4
解决办法
4万
查看次数

C++:使用矢量/数组优化速度?

我有一个嵌套的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)

c++ vector

12
推荐指数
3
解决办法
3010
查看次数

有没有理由使用std :: list?

在阅读了这个问题并在此处查看了一些结果后,似乎应该完全避免使用C++中的列表.我总是期望链接列表是我只需要迭代所有内容的情况下的首选容器,因为插入是指针操作的问题,并且永远不需要重新分配.

显然,由于"缓存局部性",列表的迭代速度非常慢,因此必须使用更少的保留内存或更快的添加(从第二个链接看起来速度不是那么快)的任何好处似乎都不值得它.

话虽如此,当我应该,从性能的角度来看,使用std::liststd::deque或者,如果可能的话,std::vector

另外,std::forward_list还会有很多缓存未命中?

c++ containers stl

12
推荐指数
4
解决办法
6522
查看次数

STL映射与向量的迭代器访问性能?

使用迭代器循环STL映射与向量之间的性能差异是什么?我想使用map键进行插入,删除和一些访问,但我还需要定期访问map中的每个元素.

c++ performance iterator stl map

11
推荐指数
4
解决办法
2万
查看次数