stl 相关问题

标准模板库(STL)是通用容器,迭代器,算法和函数对象的C ++库。当C ++被标准化时,STL的大部分被采用到标准库中,并且标准库中的这些部分有时也被错误地统称为“STL”。

有没有办法访问 C++ 中 std::bind() 返回的函数对象中存储的参数?

我需要一种方法将 std::bind() 返回的函数对象分解为其函数模板中的参数。 下面的代码片段显示了我想要做的事情: #包括 #包括<

回答 1 投票 0

重载STL排序运算符[重复]

我想知道为什么以下运算符重载会失败并出现编译器错误。我使用的方法与此处建议的方法类似。 布尔运算符 >(const int &a, const int &b) { 返回(...

回答 1 投票 0

C++ 中强化的“auto”

有一次我意识到我希望能够编写这样的代码而不重复代码: 模板 std::ostream& 运算符<< (std::ostream& o, const

回答 1 投票 0

防止 std::vector 在 push_back 上调整大小

我有一个 std::vector,我知道它永远不会增长——它总是有 n 个元素(不幸的是,n 在编译时未知,所以我不能使用 std::array)。我可以: std::向量...

回答 2 投票 0

您是否应该更喜欢重载而不是函数模板的专门化?

我的教科书指出,您可以通过模板专业化或函数重载为标准库函数(例如 swap(x,y))提供自己的实现。这对任何人都有用...

回答 3 投票 0

vector::push_back()元素的生命周期

我想确认一下我认为我对 std::vector 上的 Push_back() 对象的生命周期的理解。我读到的内容是向量中的元素是副本。那么,是...

回答 4 投票 0

`显式向量( size_type count, const Allocator& alloc = Allocator() );`和`std::vector<T,Allocator>::reserve`之间的区别

有什么区别 std::vector vec1(大小); 和 std::向量 vec2; vec2.reserve(大小); 它们都在堆上分配内存吗?

回答 1 投票 0

C++中有标准的日期/时间类吗?

C++ stl 有标准时间类吗?或者我是否必须在写入流之前转换为 c 字符串。例如,我想将当前日期/时间输出到字符串流: time_t tm(); ostringstr...

回答 8 投票 0

即使在 std::shared_ptr 拥有所有权之后,shared_from_this 也有空的 _M_weak_this

我使用 C++ 智能指针将一个类(我们称之为 A)存储在 std::vector 中(因此向量签名为 std::vector>)。 #包括 #包括 我使用 C++ 智能指针将一个类(我们称之为 A)存储在 std::vector 中(因此向量签名为 std::vector<std::shared_ptr<A>>)。 #include <iostream> #include <memory> #include <vector> class A : std::enable_shared_from_this<A> { public: void doWork(); std::shared_ptr<A> getSharedRef(); }; void A::doWork() { std::cout << "Working..." << std::endl; } std::shared_ptr<A> A::getSharedRef() { return shared_from_this(); } class AManager { static std::vector<std::shared_ptr<A>> aList; public: static void init(); // safety because statics static void doLotsOfWork(); static std::shared_ptr<A> createA(); }; std::vector<std::shared_ptr<A>> AManager::aList; void AManager::init() { aList = std::vector<std::shared_ptr<A>>{}; } void AManager::doLotsOfWork() { for (auto a : aList) { a->doWork(); } } std::shared_ptr<A> AManager::createA() { std::shared_ptr<A> a = std::make_shared<A>(); aList.push_back(a); return a->getSharedRef(); // <----- EXCEPTION } int main() { AManager::init(); AManager::createA(); return 0; } 由于某种原因,这会抛出一个 std::bad_weak_ptr,经过检查,我注意到 a,无论出于何种原因,其 _M_weak_this 等于 0x0 或 NULL。由于我已经创建了一个引用该对象的有效 std::shared_ptr,因此它不应该为空。 此外,我知道没有发生内存损坏,因为A(带有变量)在其地址上完全完好无损。 我做错了什么? 问题似乎是因为您是从 enable_shared_from_this 私有继承的 shared_from_this 要求“enable_shared_from_this<T> 应是 T 的可访问基类。” (根据[util.smartptr.enab]) 通过私有继承,基类不可访问,因此违反了先决条件。我认为这意味着未定义的行为。 Clang 和 GCC 都会抛出异常。 解决方案是公开继承。 class A : public std::enable_shared_from_this<A> { //... }; *在 C++17 中,措辞似乎已移至 [util.smartptr.shared.const],但要求基本相同。 尽管 ~andyg 的答案是正确的,但将基类公开并不总是足够的。我遇到了这样的 nullptrweak_ptr 的困难情况,我必须找出困难的方法,即具有 public std::enable_shared_from_this 基类的类不能位于匿名名称空间内。希望这些信息可以帮助将来的人!

回答 2 投票 0

模板核心头膨胀和 c++17 中 cpp 文件中 std::hash 的显式特化

假设我有一个核心库,我试图在其中为我的核心类添加 std::hash 的显式专业化,包括 Foo 类(以及我也想专门化 std::hash 的许多其他类)。 弗...

回答 2 投票 0

如何在 C++ 中为 copy_if 等定义“一元谓词”?

我正在尝试使用 std::copy_if() 并且我从 http://www.cplusplus.com/reference/algorithm/copy_if/ 中了解了语法的工作原理: auto it = std::copy_if (foo.begin(), foo.end(), bar.be...

回答 1 投票 0

为什么他们在STL的分配器和向量类中使用指针、void_pointer和其他typedef?

查看https://en.cppreference.com/w/cpp/memory/allocator value_type 是 T 的 typedef(或别名), 指针是 T* 的 typedef(或别名), void_pointer 是 void* 的 typedef(或别名), 为什么我们需要...

回答 1 投票 0

为什么std::unordered_map的KeyEqual没有被它的operator==使用?

在下面的代码中,我为unordered_map定义了模板参数Hash和KeyEqual。我期望输出是 1 1 1 1 但实际上是 1 1 0 1。为什么会发生这种情况?是因为 std::

回答 1 投票 0

`unordered_map::KeyEqual` 未在 `operator==` 中使用

在下面的代码中,我为unordered_map定义了模板参数Hash和KeyEqual。我期望输出是 1 1 1 1 但实际上是 1 1 0 1。为什么会发生这种情况?是因为 std::

回答 1 投票 0

为什么 std::priority_queue 中的元素解构了这么多次?

我正在使用 std::priority_queue 进行文件排序,我认为堆是对流数据进行排序的最佳方式。 这是代码: #包括 使用命名空间 std; 结构体A { A(在...

回答 1 投票 0

STL c++ 中的 Priority_queue 向量

如何将向量v转换为priority_queue pq? 就像我们可以做的那样—— for(int i=0;i<(int)v.size();i++) pq.push(v[i]); But is it possible to keep it more short and concise?

回答 3 投票 0

标准库使用的重写内存分配方法? [重复]

是否可以重写STL分配、管理和释放内存的方式?如果可能的话,人们会怎样做呢?有没有办法以保留处理原始内存的代码的方式来做到这一点......

回答 2 投票 0

使用 C++ 容器和智能指针而不是 C 样式数组作为缓冲区有缺点吗?

我经常看到,当 C++ 函数想要返回数据缓冲区时,调用者必须提供指向缓冲区第一个元素的指针和计数作为函数参数。有时...

回答 1 投票 0

如何根据两个集合的对称差创建 std::set

我有两套琴弦。 设置 A; 设置 B; 我将在这两个集合中插入一些元素,并且我插入其中的一些元素是公共元素。 我可以

回答 2 投票 0

loki“Assoc Vector”是什么,它是如何工作的,它与 flat_map 有何关系?

https://github.com/snaewe/loki-lib/blob/master/include/loki/AssocVector.h 显然这段代码是由 Andrei Alexandrescu 编写的。 对于对 flat_map 进行基准测试有一个流行的答案,但细节很少......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.