草庐IT

stl_algobase

全部标签

C++ STL Map vs Vector 速度

在我的实验性编程语言的解释器中,我有一个符号表。每个符号由一个名称和一个值组成(该值可以是例如:字符串、int、函数等类型)。起初,我用一个vector来表示表格,并遍历符号检查给定的符号名称是否合适。然后我虽然使用map,在我的例子中是map,会比一直遍历vector要好但是:这部分有点难解释,但我会努力的。如果在我的语言程序中第一次检索变量,当然必须找到它在符号表中的位置(现在使用vector)。如果我每次执行该行时都遍历该vector(想想一个循环),那将非常慢(就目前而言,几乎与微软的批处理一样慢)。所以我可以使用映射来检索变量:SymbolTable[myVar.Name]但

C++ STL Map vs Vector 速度

在我的实验性编程语言的解释器中,我有一个符号表。每个符号由一个名称和一个值组成(该值可以是例如:字符串、int、函数等类型)。起初,我用一个vector来表示表格,并遍历符号检查给定的符号名称是否合适。然后我虽然使用map,在我的例子中是map,会比一直遍历vector要好但是:这部分有点难解释,但我会努力的。如果在我的语言程序中第一次检索变量,当然必须找到它在符号表中的位置(现在使用vector)。如果我每次执行该行时都遍历该vector(想想一个循环),那将非常慢(就目前而言,几乎与微软的批处理一样慢)。所以我可以使用映射来检索变量:SymbolTable[myVar.Name]但

c++ - 在 dll 接口(interface)中使用 STL 类时消除 C4251 警告的一种方法

在dll接口(interface)中使用STL类作为Commonpracticeindealingwithwarningc4251:class…needstohavedll-interface不是一个好习惯。解释。举个例子:#include#include#includeclass__declspec(dllexport)HelloWorld{public:HelloWorld(){abc.resize(5);for(inti=0;iabc;std::stringstr;};编译此文件时,可以观察到以下警告:warningC4251:'HelloWorld::str':class'st

c++ - 在 dll 接口(interface)中使用 STL 类时消除 C4251 警告的一种方法

在dll接口(interface)中使用STL类作为Commonpracticeindealingwithwarningc4251:class…needstohavedll-interface不是一个好习惯。解释。举个例子:#include#include#includeclass__declspec(dllexport)HelloWorld{public:HelloWorld(){abc.resize(5);for(inti=0;iabc;std::stringstr;};编译此文件时,可以观察到以下警告:warningC4251:'HelloWorld::str':class'st

C++:替代 STL 和 Boost?

C++是一种多范式语言,STL和Boost是针对功能构建的语言范式。STL由容器(保存数据)、迭代器(访问数据)和算法(操作数据的函数)组成。算法函数通过使用迭代器应用于容器。作为副作用,这些方法不是容器类的一部分,而是完全独立的。(这避免了库编写者的冗余,但对库用户来说很痛苦。)是否有C++替代STL/Boost以更传统的面向对象风格提供此类容器?我正在寻找字符串、vector、链表、map、树、哈希表等。容器应该易于继承和扩展。相比之下,从STL/Boost扩展类是verybadidea这是他们设计师的设计。PS:请不要使用下面的回复空间来夸大STL/Boost的优势。我很了解他们

C++:替代 STL 和 Boost?

C++是一种多范式语言,STL和Boost是针对功能构建的语言范式。STL由容器(保存数据)、迭代器(访问数据)和算法(操作数据的函数)组成。算法函数通过使用迭代器应用于容器。作为副作用,这些方法不是容器类的一部分,而是完全独立的。(这避免了库编写者的冗余,但对库用户来说很痛苦。)是否有C++替代STL/Boost以更传统的面向对象风格提供此类容器?我正在寻找字符串、vector、链表、map、树、哈希表等。容器应该易于继承和扩展。相比之下,从STL/Boost扩展类是verybadidea这是他们设计师的设计。PS:请不要使用下面的回复空间来夸大STL/Boost的优势。我很了解他们

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

如果堆栈为空且没有可弹出的内容,为什么std::stack::pop()不抛出异常?(我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡。我的猜测是,尽管C++支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在std::stack::pop中抛出异常)。 最佳答案 我认为pop()不必抛出异常的原因与效率或性能无关,而是与异常有关。正如所争论的elsewhere:SGIexplanation:http://www.sgi.com/tech/stl/stack.

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

如果堆栈为空且没有可弹出的内容,为什么std::stack::pop()不抛出异常?(我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡。我的猜测是,尽管C++支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在std::stack::pop中抛出异常)。 最佳答案 我认为pop()不必抛出异常的原因与效率或性能无关,而是与异常有关。正如所争论的elsewhere:SGIexplanation:http://www.sgi.com/tech/stl/stack.

c++ - 指向 STL 容器元素的指针

给定一个非连续的STL容器(您也可以考虑boost::unordered_map和boost::multi_index_container),如果没有元素被删除,是否保证容器内元素的内存地址永远不会改变,(但可以添加新的)?例如classABC{};////...//std::listabclist;ABCabc;abclist.insert(abc);ABC*abc_ptr=&(*abclist.begin());换句话说将abc_ptr指向abc在整个执行过程中,如果我不删除abc来自abc_list.我问这个是因为我要包装类ABC在C++/Cli中,所以我需要指向ABC的指针包装

c++ - 指向 STL 容器元素的指针

给定一个非连续的STL容器(您也可以考虑boost::unordered_map和boost::multi_index_container),如果没有元素被删除,是否保证容器内元素的内存地址永远不会改变,(但可以添加新的)?例如classABC{};////...//std::listabclist;ABCabc;abclist.insert(abc);ABC*abc_ptr=&(*abclist.begin());换句话说将abc_ptr指向abc在整个执行过程中,如果我不删除abc来自abc_list.我问这个是因为我要包装类ABC在C++/Cli中,所以我需要指向ABC的指针包装