相关疑难解决方法(0)

C++容器的一般用例

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

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

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

c++ containers stl

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

什么是STL?

我不是C++程序员,很难理解网站上给出的解释.我不了解容器或迭代器,也没有计划在不久的将来学习C++.所以用外行人的话说:什么是STL,它能为我做什么?它与Python标准库或glibc相比如何?

c++ stl

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

stl vector并发读取线程安全吗?

我正在开发一个应用程序,其中大量的线程需要迭代一组字符串值,并尝试将其自己的数据与列表中的可用数据进行匹配.

我正在寻找以下用例:

  1. Vector初始化为几个std :: string类型的元素.(可以说对象名是strList).strList将在应用程序启动时初始化.
  2. 所有线程都将遍历strList以查看它的值是否与strList的至少一个元素匹配.
  3. 没有线程会尝试修改strList,它将严格用作只读对象.

那么请告诉我并发读取是否对矢量对象是线程安全的.我使用的是RHEL 6,gcc版本是4.5.x

c++ concurrency stl thread-safety language-lawyer

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

标准库和标准模板库有什么区别?

我一直在看C++标准库和C++标准模板库(STL).他们之间有什么区别?维基百科提到他们共享一些标题,但这就是它.

c++ standards stl c++-faq

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

在C++中查找String数组的大小

所以我有一个字符串数组.这是一个例子:

string array[] = {"Example", "Example2", "Example3"};
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以找到像上面那样的数组中的元素数量.我不能使用这种方法:

int numberofelements = sizeof(array)/sizeof(array[0]);
Run Code Online (Sandbox Code Playgroud)

这是因为元素的大小不同.还有另外一种方法吗?

c c++ arrays

21
推荐指数
5
解决办法
7万
查看次数

20
推荐指数
4
解决办法
6311
查看次数

STL哈希函数

STL是否有可用的Hash功能,这些功能是否公开?

我知道有一些使用哈希值的非标准实现(例如boost :: hash_map),而MSVC8实现了hash_map/hash_set/etc的版本.

但是有没有在C++ 98 STL中定义的Hash函数

如果没有,那么可靠散列函数的最佳非C++ 98源代码是什么?

首选源的顺序(从最可接受到最少):Boost,C++ 0x标准STL,TR1,其他第三方.

c++ algorithm boost cryptography stl

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

我使用C++标准库的查找有什么问题?

我正在尝试使用C++标准库的find算法,如下所示:

  template<class T>
  const unsigned int AdjacencyList<T>::_index_for_node(
      const std::vector<T>& list, const T& node
  ) throw(NoSuchNodeException)
  {
    std::vector<T>::iterator iter = std::find(list.begin(), list.end(), node);
  }
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我得到以下错误:

In file included from ../AdjacencyList.cpp:8:
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&)’:
../AdjacencyList.h:99: error: expected ‘;’ before ‘iter’
../AdjacencyList.h:100: error: ‘iter’ was not declared in this scope
In file included from ../AdjacencyListTest.cpp:9:
../AdjacencyList.h: In member function ‘const unsigned int Graph::AdjacencyList<T>::_index_for_node(const std::vector<T, std::allocator<_Tp1> >&, const T&)’:
../AdjacencyList.h:99: error: expected …
Run Code Online (Sandbox Code Playgroud)

c++ templates typename c++-standard-library

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

在deque中对迭代器失效的困惑

关于deque中的迭代器失效,我有点困惑.(在这个问题的背景下)

以下是摘自 - The C++标准库:教程和参考,作者:Nicolai M. Josuttis

开头或结尾之外的任何元素的插入或删除都会 使引用双端队列元素的所有指针,引用和迭代器无效.

以下是SGI网站的摘录:

deque的迭代器失效的语义如下.Insert(包括push_frontpush_back)使引用deque的所有迭代器无效.在双端队列中间擦除使所有引用双端队列的迭代器无效.只有当它指向已擦除的元素时,在双端队列的开头或结尾处擦除(包括 pop_frontpop_back)才会使迭代器无效.

恕我直言,deque是块的集合,第一个块在一个方向上生长,最后一个块在相反方向上生长.

  -   -  -  
  -   -  -
  |   -  -  ^
  |   -  -  |
  V   -  -  |
      -  -  -
      -  -  -
Run Code Online (Sandbox Code Playgroud)

push_back, push_front 不应该对deque迭代器产生任何影响(我同意Josuttis).

什么是正确的解释?标准对此有何看法?

c++ standards stl deque

14
推荐指数
3
解决办法
5828
查看次数

C++中的订单维护数据结构

我正在寻找一种能够有效解决订单维护问题的数据结构.换句话说,我需要有效率

  • 插入(在中间),
  • 删除(在中间),
  • 比较容器中元素的位置.

我找到了讨论这个问题的好文章:

算法非常有效(某些状态对于所有操作都是O(1)),但它们似乎并不是微不足道的,我想知道是否存在这些或类似数据结构的开源C++实现.

我已经看到了相关的主题,建议了所有操作的时间复杂度为O(log n)的一些更简单的方法,但在这里我正在寻找现有的实现.

如果在其他一些流行的语言中有一个例子,它也会很好,这样我至少可以在尝试自己实现它之前尝试它.

细节

我要去

  • 维护一个指向对象的指针列表,
  • 我不时需要更改对象的顺序(删除+插入),
  • 给定一个对象的子集,我需要能够快速对它们进行排序并按正确的顺序处理它们.

注意

标准的订购容器(std :: set,std :: map)不是我想要的,因为它们会维护我的订单,但我需要自己订购元素.类似于我对std :: list的处理,但是位置比较是线性的,这是不可接受的.

c++ algorithm data-structures

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