草庐IT

stl-algorithm

全部标签

c++ - 在 Xcode 中检查 STL 容器

通过谷歌搜索,看起来Xcode(在我的例子中是3.1)至少应该尝试给我一个STL容器的合理调试View——或者至少是vector。但是,每当我在调试器中查看vector时,我只会看到M_impl,以及M_start和M_finish成员(以及其他几个成员)——但中间什么也没有!(这是一个调试版本,顺便说一句)。我是否遗漏了某个设置或某处?我还读到有可用的宏可以进一步增强调试查看器以检查更复杂的容器-但一直无法找到任何宏。我还希望能够查看std::wstrings,而不必转到内存查看器。它显示std::string很好。我可以做些什么来显示std::wstring吗?我意识到这是一个有点

c++ - 在 Enterprise Architect 中使用 C++ STL

如何在EnterpriseArchitect中使用部分C++STL?能够将某些类属性指定为std::string或使用std::auto_ptr(甚至std::tr1::shared_ptr)作为类型。另一件有趣的事情是如何将std::vector和std::map等容器类型集成到EA中。 最佳答案 我已经讲过STL容器在EA中的样子,我想它也可以扩展到STL指针:正向工程:您可以在语言设置中为全局的不同多样性定义集合类,或者为项目的特定类定义集合类(这将定义它如何“包含”在其他类中)thisway.简单示例设置:确保为关联的目标类

c++ - 创建 STL 映射键迭代器

通常,您有一个类似map的map其中键是映射值的名称,并且您需要一个API让消费者看到所有名称......例如填充GUI列表框。您可以构建一个vector并将其作为API调用返回,但这样效率很低。您可以只返回对map的引用,但随后也可以访问这些值,而您可能不希望这样。那么您如何编写一个兼容的类KeyIterator,它包装映射并提供对该映射中的键的标准迭代器访问。例如:mapm=...KeyIteratorki(m);for(KeyIterator::iteratorit=ki.begin();it!=ki.end();++it)coutKeyIterator应该是轻量级的,这样您就可

c++ - 接受 STL_container_type<string>::iterator 的模板化参数

我有一个函数,其中有一个包含字符串的容器(例如vector、set、list),并且给定一个开始迭代器和一个结束迭代器,通过迭代器范围处理字符串。目前函数声明如下:templatevoidProcessStrings(ContainerIterbegin,ContainerIterend);现在这将接受任何符合实现operator*的隐式接口(interface)的类型,前缀operator++以及函数体中的任何其他调用。我真正想做的是像下面这样明确限制输入量的定义(伪代码警告):template::iterator>voidProcessStrings(Container::iter

c++ - C++ 库中静态 STL 容器的双重初始化

这里有一些关于“静态初始化顺序失败”的很好的问题和答案,但我似乎遇到了它的另一种表达方式,特别难看,因为它不会崩溃,但会丢失和泄漏数据。我有一个自定义C++库和一个链接到它的应用程序。库中有一个静态的STL容器,用于注册一个类的所有实例。这些实例恰好是应用程序中的静态变量。作为“惨败”的结果(我相信),我们在应用程序初始化期间让容器充满了应用程序实例,然后库开始初始化并且容器被重置(可能是内存泄漏),最后只有库中的实例。这是我用简化代码重现它的方式:mylib.hpp:#include#include#includeusingnamespacestd;classMyLibClass{s

c++ - STL 中的随机元素在 log n 中设置/映射

由于C++STLset/map是作为红黑树实现的,因此不仅可以执行insert、delete和find在O(logn)时间内,还有getMin、getMax、getRandom。据我了解,前两者在begin()和end()中具有等效项(正确吗?)。最后一个怎么样?我该怎么做?到目前为止,我唯一的想法是将advance与随机参数一起使用,但这需要线性时间......编辑:“随机”应该指的是均匀分布 最佳答案 begin()等同于getMin操作,但是end()返回一个超过最大值的迭代器,所以它会是rbegin()。至于getRando

C++ 结构对齐和 STL vector

我有一个672字节长的遗留数据结构。这些结构按顺序存储在一个文件中,我需要读入它们。虽然我可以一个接一个地阅读它们,但最好这样做://IknowinadvancehowmanystructstoreadinvectorbunchOfStructs;bunchOfStructs.resize(numberOfStructs);ifstreamifs;ifs.open("file.dat");if(ifs){ifs.read(&bunchOfStructs[0],sizeof(MyStruct)*numberOfStructs);}这行得通,但我认为它之所以行得通,是因为数据结构的大小恰好

c++ - 为什么存储在 STL 容器中的类禁止重载 operator&()?

突然在thisarticle("problem2")我看到一条声明,如果该类具有重载的operator&(),则C++标准禁止使用STL容器来存储该类的元素。重载operator&()canindeedbeproblematic,但看起来可以通过asetofdirty-lookingcaststhatareusedinboost::addressof()轻松使用默认的“寻址”运算符并且被认为是便携的和符合标准的。为什么存在boost::addressof()解决方法时,禁止对存储在STL容器中的类重载operator&()? 最佳答案

c++ - 如何解决据报告驻留在 STL 字符串中的内存泄漏?

对于一个学校项目,我们必须通过网络发送大文件。我们必须使用Poco::XML作为我们的数据。我们的文件通过网络发送后,内存似乎没有释放。这里是接收端一个~9Mb文件的例子:valgrind--leak-check=full--show-reachable=yes-vourExecutableparms返回:12,880,736bytesin37blocksaredefinitelylostinlossrecord101of101at0x4C2747E:operatornew(unsignedlong)(vg_replace_malloc.c:261)by0x5A3AC88:std::s

c++ - std::vector 的自包含、STL 兼容实现

VisualStudio2010及更早版本附带的std::vector的实现具有众所周知的特殊性:resize方法具有以下签名(C++03兼容):voidresize(size_typenew_size,value_typevalue);代替大多数其他STL实现(如gcc的STL或STLport)早在C++11之前就使用的符合C++11的签名:voidresize(size_typenew_size,constvalue_type&value);第一个变体的问题是,在某些情况下,如果value_type具有对齐规范,它将无法编译:struct__declspec(align(64))S