草庐IT

stl-algorithm

全部标签

c++ - 使用 STL 排序就地排序表

我有一个存储为(i,j,k)格式(来自稀疏矩阵)的巨大表(大约50Gb)uint32_t*idx1,*idx2;float*vals;uint32_ttablesize;并且我想使用作为idx1和idx2函数的给定比较函数对其进行适当的排序。这可以使用std::sort完成吗?具体来说,稀疏矩阵中每个值为v的非零条目(i,j)的存储方式是将i放在idx1中,将j放在idx2中,将v放在vals中的相应条目中。然后我想根据(i1,j1,v1)对这些条目进行排序(i1我能够搜集到的关于在非标准数据类型上使用std::sort的示例假设每个被比较的项目都是一个类的单个实例;这里每个项目都由不

c++ - 返回时交换 STL?

很抱歉问了这么长的问题,但我尽量说清楚。这在某种程度上遵循了我之前关于stringsinC++的问题。.我试图弄清楚如何在不分配冗余内存的情况下从函数返回std::string,不依赖NRVO。我不想依赖NRVO的原因是:目前使用的编译器不支持即使支持它也可能不会始终在Debug模式下启用在某些情况下可能会失败(example)请注意,我需要一个C++03兼容的解决方案(因此没有C++0x右值引用,不幸的是......)最简单的方法是通过引用传递并执行std::swap,就像这样voidtest(std::string&res){std::strings;//...res.swap(s

c++ - STL 容器元素是否明确要求 (noexcept) 可破坏?

C++11(和C++14)STL容器有noexcept析构函数和clear()成员函数。这意味着元素应该有noexcept析构函数,或者至少存储在容器中的实际元素在被销毁时不应该抛出任何异常——或者更准确地说,相应的allocator_traits::destroy调用不应抛出。这是否在标准的任何地方指定为要求(明确或由另一个明确要求暗示)?如果不是,为什么?我知道is_nothrow_constructible需要noexcept析构函数,但是is_constructible单独没有,并且容器要求是根据概念而不是类型特征模板指定的。 最佳答案

c++ - 为什么不能将 const 对象放入 STL 容器中?

请参阅下面的代码-我正在尝试将const对象放入vector中。我知道答案是“STL容器要求对象是可分配的和可复制构造的”,但是,在不引用标准的情况下,任何人都可以解释这样做的问题是什么?我不明白为什么不能复制这样的类(除了c++不允许)。它只是一个存储的值,不允许更改-为什么不能将它放在一个vector中,简单地创建另一个这些对象?#include//Attempt1///home/doriad/Test/Test.cxx:3:8:error:non-staticconstmember‘constintMyClass::x’,can’tusedefaultassignmentoper

c++ - 如何在 gdb 中转储 STL 容器数据?

我无法在gdb中转储STL无序映射容器值。变量类型是std::unordered_mapvar;我的gdb版本-7.7.1GDB配置:configure--host=x86_64-linux-gnu--target=x86_64-linux-gnu--with-auto-load-dir=$debugdir:$datadir/auto-load--with-auto-load-safe-path=$debugdir:$datadir/auto-load--with-expat--with-gdb-datadir=/usr/local/share/gdb(relocatable)--wi

c++ - 初始化 STL `map` 大小

是否可以初始化STLmap大小?我知道我的map最后会有多少元素,我想在一开始就分配所有需要的内存。 最佳答案 有几个选项:您可以尝试将map与有状态分配器一起使用。例如来自Boost.Container或者来自C++11。或者,如果您接受无状态分配器的限制,那么您甚至可以使用C++98/03中的映射。考虑使用unordered_map(同样来自Boost或来自C++11)——它将桶计数作为构造函数参数。它与map的不同之处在于它基于散列而不是严格的弱排序。另一个选项是来自Boost的flat_map.它具有reserve成员函数。

c++ - 如何使用 std::copy 读取任意数量的值?

我正在尝试编写与此相反的操作:std::ostreamouts;//properlyinitializedofcoursestd::setmy_set;//dittoouts(outs));应该是这样的:std::istreamins;std::set::size_typesize;ins>>size;std::copy(std::istream_iterator(ins),std::istream_iterator(ins)???,std::inserter(my_set,my_set.end()));但我坚持使用“结束”迭代器——输入交互器不能使用std::advance并且我也不

c++ - STL BigInt 类实现

STL有BigInt类实现吗?(容器中包含许多数字的数字) 最佳答案 C++标准库(有时被错误地称为“STL”)不包含任何扩展精度支持。 关于c++-STLBigInt类实现,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4997363/

c++ - 如果我无法承受抛出异常时的低性能,我可以使用 STL 吗?

例如,我正在编写一个实时处理和流式传输音频的多线程时间关键型应用程序。音频中断是完全不能接受的。这是否意味着我不能使用STL,因为抛出异常时速度可能会变慢? 最佳答案 通常,如果new失败,STL容器自己抛出的唯一异常是std::bad_alloc。唯一的其他时间是用户代码(例如构造函数、赋值、复制构造函数)抛出。如果您的用户代码从不抛出异常,那么您只需要防止新的异常抛出,这很可能是您无论如何都必须做的。其他可以抛出异常的东西:-如果您越界访问at()函数,它们可能会抛出std::out_of_range。无论如何,这是一个严重的程

c++ - 如何使用 STL 字符串和流读取/存储 unicode

我需要修改我的程序以接受Unicode,它可能来自任何UTF-8以及各种UTF-16和UTF-32编码。我对Unicode了解不多(尽管我读过JoelSpolsky的article和Wikipediapage)。现在我正在使用std::istream并通过char读取我的输入char,然后存储(必要时)在std::string中。我愿意对此进行修改(尽可能不费力)以支持上述编码,并且弄清楚如何测试上述编码(我有点白面包美国人,甚至不知道如何用另一种编码制作示例文本文件),理想情况下以跨平台的方式做到这一点。此外,如果可能的话,我想尽可能地节省空间(所以如果我们只需要一个字节/字符,我们