我不是C++程序员,很难理解网站上给出的解释.我不了解容器或迭代器,也没有计划在不久的将来学习C++.所以用外行人的话说:什么是STL,它能为我做什么?它与Python标准库或glibc相比如何?
我正在开发一个应用程序,其中大量的线程需要迭代一组字符串值,并尝试将其自己的数据与列表中的可用数据进行匹配.
我正在寻找以下用例:
那么请告诉我并发读取是否对矢量对象是线程安全的.我使用的是RHEL 6,gcc版本是4.5.x
我一直在看C++标准库和C++标准模板库(STL).他们之间有什么区别?维基百科提到他们共享一些标题,但这就是它.
所以我有一个字符串数组.这是一个例子:
string array[] = {"Example", "Example2", "Example3"};
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以找到像上面那样的数组中的元素数量.我不能使用这种方法:
int numberofelements = sizeof(array)/sizeof(array[0]);
Run Code Online (Sandbox Code Playgroud)
这是因为元素的大小不同.还有另外一种方法吗?
你知道,有评论,例子和东西.
编码时需要快速参考.
STL是否有可用的Hash功能,这些功能是否公开?
我知道有一些使用哈希值的非标准实现(例如boost :: hash_map),而MSVC8实现了hash_map/hash_set/etc的版本.
但是有没有在C++ 98 STL中定义的Hash函数?
如果没有,那么可靠散列函数的最佳非C++ 98源代码是什么?
首选源的顺序(从最可接受到最少):Boost,C++ 0x标准STL,TR1,其他第三方.
我正在尝试使用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) 关于deque中的迭代器失效,我有点困惑.(在这个问题的背景下)
以下是摘自 - The C++标准库:教程和参考,作者:Nicolai M. Josuttis
除开头或结尾之外的任何元素的插入或删除都会 使引用双端队列元素的所有指针,引用和迭代器无效.
以下是SGI网站的摘录:
deque的迭代器失效的语义如下.Insert(包括
push_front和push_back)使引用deque的所有迭代器无效.在双端队列中间擦除使所有引用双端队列的迭代器无效.只有当它指向已擦除的元素时,在双端队列的开头或结尾处擦除(包括pop_front和pop_back)才会使迭代器无效.
恕我直言,deque是块的集合,第一个块在一个方向上生长,最后一个块在相反方向上生长.
- - -
- - -
| - - ^
| - - |
V - - |
- - -
- - -
Run Code Online (Sandbox Code Playgroud)
push_back, push_front 不应该对deque迭代器产生任何影响(我同意Josuttis).
什么是正确的解释?标准对此有何看法?
我正在寻找一种能够有效解决订单维护问题的数据结构.换句话说,我需要有效率
我找到了讨论这个问题的好文章:
算法非常有效(某些状态对于所有操作都是O(1)),但它们似乎并不是微不足道的,我想知道是否存在这些或类似数据结构的开源C++实现.
我已经看到了相关的主题,建议了所有操作的时间复杂度为O(log n)的一些更简单的方法,但在这里我正在寻找现有的实现.
如果在其他一些流行的语言中有一个例子,它也会很好,这样我至少可以在尝试自己实现它之前尝试它.
细节
我要去
注意
标准的订购容器(std :: set,std :: map)不是我想要的,因为它们会维护我的订单,但我需要自己订购元素.类似于我对std :: list的处理,但是位置比较是线性的,这是不可接受的.
c++ ×10
stl ×7
algorithm ×2
standards ×2
arrays ×1
boost ×1
c ×1
c++-faq ×1
concurrency ×1
containers ×1
cryptography ×1
deque ×1
reference ×1
templates ×1
typename ×1