草庐IT

stl_algobase

全部标签

c++ - 在模块(exes和dlls)之间使用STL(TR1)shared_ptr是否安全

我知道在一个模块中新建某些内容并在另一个模块中删除它通常会导致VC++出现问题。不同运行时的问题。如果我没记错的话,将模块与静态链接的运行时和/或动态链接的版本控制不匹配混合起来都会搞砸。但是,跨模块使用VC++2008的std::tr1::shared_ptr是否安全?因为只有一个版本的运行时甚至知道什么是shared_ptr,所以静态链接是我唯一的危险(现在......)。我以为我已经阅读了boost的shared_ptr版本可以像这样安全使用,但我使用的是Redmond的版本......我试图避免在分配模块中对释放对象进行特殊调用。(或类本身中的“删除这个”之类的东西)。如果这一

c++ - 在模块(exes和dlls)之间使用STL(TR1)shared_ptr是否安全

我知道在一个模块中新建某些内容并在另一个模块中删除它通常会导致VC++出现问题。不同运行时的问题。如果我没记错的话,将模块与静态链接的运行时和/或动态链接的版本控制不匹配混合起来都会搞砸。但是,跨模块使用VC++2008的std::tr1::shared_ptr是否安全?因为只有一个版本的运行时甚至知道什么是shared_ptr,所以静态链接是我唯一的危险(现在......)。我以为我已经阅读了boost的shared_ptr版本可以像这样安全使用,但我使用的是Redmond的版本......我试图避免在分配模块中对释放对象进行特殊调用。(或类本身中的“删除这个”之类的东西)。如果这一

c++ - 对 STL 的头文件

我习惯于使用STLpair编写代码,而不包括任何特定的头文件来使用pair。但是今天一位friend告诉我,每当我使用pair时,我都应该使用utilityheader,否则我会在某些编译器上遇到问题。请告诉这是不是真的。如果我可以不使用它来编写代码,那么实用程序头有什么用。 最佳答案 您应该几乎总是为您在程序中使用的每个类包含头文件,否则您取决于某些头文件在内部使用您感兴趣的类的事实,但这可能会在另一个编译器或版本上发生变化。您需要阅读一个类的引用(例如在cppreference.com-http://en.cppreferenc

c++ - 对 STL 的头文件

我习惯于使用STLpair编写代码,而不包括任何特定的头文件来使用pair。但是今天一位friend告诉我,每当我使用pair时,我都应该使用utilityheader,否则我会在某些编译器上遇到问题。请告诉这是不是真的。如果我可以不使用它来编写代码,那么实用程序头有什么用。 最佳答案 您应该几乎总是为您在程序中使用的每个类包含头文件,否则您取决于某些头文件在内部使用您感兴趣的类的事实,但这可能会在另一个编译器或版本上发生变化。您需要阅读一个类的引用(例如在cppreference.com-http://en.cppreferenc

c++ - 使用 std::copy 插入 STL 队列

我想使用std::copy将元素插入到这样的队列中:vectorv;v.push_back(1);v.push_back(2);queueq;copy(v.begin(),v.end(),insert_iterator>(q,q.front()));但是这个编译失败,提示begin不是std::queue的成员。注意:我也用std::inserter进行了尝试-这也失败了,这一次说'reference'不是'std::queue'的成员。std::back_inserter和std::back_insert_iterator也会失败并出现同样的错误。我是否遗漏了一些明显的东西,或者in

c++ - 使用 std::copy 插入 STL 队列

我想使用std::copy将元素插入到这样的队列中:vectorv;v.push_back(1);v.push_back(2);queueq;copy(v.begin(),v.end(),insert_iterator>(q,q.front()));但是这个编译失败,提示begin不是std::queue的成员。注意:我也用std::inserter进行了尝试-这也失败了,这一次说'reference'不是'std::queue'的成员。std::back_inserter和std::back_insert_iterator也会失败并出现同样的错误。我是否遗漏了一些明显的东西,或者in

c++ - STL Multimap 删除/删除值

我有STLMultimap,我想从映射中删除具有特定值的条目,我不想删除整个键,因为该键可能映射到其他所需的值。请帮忙。 最佳答案 如果我理解正确,这些值可以出现在任何键下。如果是这种情况,您将不得不遍历您的multimap并删除特定值。typedefstd::multimapMultimap;Multimapdata;for(Multimap::iteratoriter=data.begin();iter!=data.end();){//youhavetodothisbecauseiteratorsareinvalidatedMu

c++ - STL Multimap 删除/删除值

我有STLMultimap,我想从映射中删除具有特定值的条目,我不想删除整个键,因为该键可能映射到其他所需的值。请帮忙。 最佳答案 如果我理解正确,这些值可以出现在任何键下。如果是这种情况,您将不得不遍历您的multimap并删除特定值。typedefstd::multimapMultimap;Multimapdata;for(Multimap::iteratoriter=data.begin();iter!=data.end();){//youhavetodothisbecauseiteratorsareinvalidatedMu

c++ - 使用 C++ STL 读取大于 4GB 的文件

几周前,我使用std::ifstream读取一些文件,但在打开时立即失败,因为文件大于4GB。当时我找不到一个像样的答案来解释为什么它被限制为32位文件大小,所以我使用nativeOSAPI编写了自己的。那么,我的问题是:有没有办法使用std::ifstream/std::ostream来处理大于4GB的文件(IE:标准c++)编辑:使用VC9编译器(VisualStudio2008)中的STL实现。EDIT2:当然必须有标准的方法来支持大于4GB的文件大小。 最佳答案 显然,这取决于库如何实现off_t。#include__int

c++ - 使用 C++ STL 读取大于 4GB 的文件

几周前,我使用std::ifstream读取一些文件,但在打开时立即失败,因为文件大于4GB。当时我找不到一个像样的答案来解释为什么它被限制为32位文件大小,所以我使用nativeOSAPI编写了自己的。那么,我的问题是:有没有办法使用std::ifstream/std::ostream来处理大于4GB的文件(IE:标准c++)编辑:使用VC9编译器(VisualStudio2008)中的STL实现。EDIT2:当然必须有标准的方法来支持大于4GB的文件大小。 最佳答案 显然,这取决于库如何实现off_t。#include__int