c++-standard-library相关内容
在大多数C ++标准库分配内存的地方,用户可以通过提供满足但是,在某些地方标准库可以(可能)分配内存,但是没有提供Allocator支持.我能想到的是: std::make_unique()(没有相应的allocate_unique()) std::any std::function(分配器支持将在C ++ 17中删除) std::valarray std::basic_filebu
..
如果我构造自己的二叉树,则可以找到每个节点的深度. 示例代码如下 template void binary_node::printNodeWithDepth(int currentNodeDepth) { if ( left ) left->printNodeWithDepth(currentNodeDepth+1)
..
哪种方法为地图分配值最有效?还是它们都针对同一代码进行了优化(在大多数现代编译器上)? // 1) Assignment using array index notation Foo["Bar"] = 12345; // 2) Assignment using member function insert() and STL pair Foo.insert(std:
..
鉴于我有两个std::map,例如: map A; map B; 我想得到两个地图的交点,形式如下: map > C; 其中的键是 A和B中的值,并且该值分别是A和B中的一对值. 有没有使用标准库的干净方法? 解决方案 template
..
到目前为止,我能够获取当前的语言环境,但是我想获取该特定语言环境的日期格式.可以使用标准库吗? #include int _tmain(int argc, _TCHAR* argv[]) { // Print the current locale std::cout
..
我想知道在文件系统上的什么地方可以找到C ++标准库的标头.特别是我正在寻找矢量模板的定义.我在/usr/include/和各个子目录中搜索.我也尝试过"locate vector.h",它带来了许多矢量的实现,但不是标准的.我想念什么? (分布是Gentoo) 背景:我正在剖析一个在大部分时间都对vector进行迭代的库,而gprof显示大部分时间都在 中花费了 std::vector
..
我遇到了这个问题最近.我的目标是了解C ++编译器如何查看包含标准库容器(例如std :: vector)的结构定义. Ben Voigt对链接问题的回答引用了C ++ 0x标准的以下内容: .... 普通类是具有普通默认构造函数(12.1)且可轻松复制的类. [注意:特别是,琐碎可复制或琐碎的类没有虚函数或虚基 类. — 尾注] 标准布局类是这样的类: 没有非
..
相关:弃用std :: allocator . 对于 std::vector 和 std::list (重点是我): 分配器,用于获取/释放内存并用于 构造/销毁该内存中的元素.类型必须符合 分配器的要求. 如果未定义行为,则为 Allocator::value_type与T 不同. 最后一句话对我来说没有意义.如果需要特定的value_type,难道不是只是重新分
..
双向迭代器没有像 std::next 和 std::prev ,当某人需要执行类似操作 时 std::set s{ 1, 2, 3, 4, 5 }; //std::set s2(s.cbegin(), s.cbegin() + 2); // won't work as there is no operator+ for std::set::const_iterator s
..
此问题是此问题的后续问题. 请考虑以下程序: #include // meaningless, only for language-lawyer purpose void abs(void*) {} int main(){ abs(nullptr); } 此程序会导致不确定的行为吗? 标准中的相关部分为 [extern.names]/4 :
..
以下代码已使用clang和MSVC成功编译,但无法在GCC 6.1.0中编译. #include template T* test(R(T::*)(Args...) const) { return nullptr; } int main() { using T = std
..
例如, #include int main() { unsigned n{}; std::cin >> n; std::cout
..
问题在于自我分配.例如,将向量复制到自身中: std::vector vec(5, "hello"); vec = vec; 上面的代码应该对自己执行5个字符串赋值操作,还是什么都不做?我的意思是以下检查是否有效: std::vector operator=(const std::vector &rhs) { if (this == &rhs)
..
根据C ++标准,C ++标准库的实现是否可以增强标准定义的C ++标准库的方法和其他功能的noexcept规范? 例如,如果C ++标准将某些功能std::f指定为void f();,是否允许标准库实现将其作为void f() noexcept;实现? 解决方案 标准回答是: §17.6.5.12.1对异常处理的限制 [res.on.异常处理] C ++标准库中定义的任
..
考虑以下代码: #include #include #include int main() { std::invoke(std::boolalpha, std::cout); // #1 using ctype_func = int(*)(int); char c = std::invoke(sta
..
我有一个符合双向迭代器要求的自定义迭代器类(但不是随机访问)。但是,两个迭代器的距离也可以在恒定时间内找到。从概念上讲, it2 - it1 是有效的,但它+ = n 不是(这些运算符重载都没有实际实现)。 重载 std :: distance()以允许标准库算法有效地计算距离是否合理使用这个迭代器? 我发现有关篡改 std 命名空间的适当性的相互矛盾的信息。 解决方案 关于名
..
输入迭代器和只读前向迭代器之间有什么区别? 因为后者是只读的,所以它们显然不满足输出迭代器的要求。而且,正因为如此,它们才能有效地输入迭代器并提供额外的保证(如果有的话)。问题是,有什么额外保证? 我的猜测是前向迭代器是多次传递而输入迭代器不是,我是对的吗? 解决方案 是的,输入迭代器是一遍迭代器。你只能迭代它们一次,而前向迭代器是多遍的。 来自§24.2.3[input
..
我试图调试一个没有可用源代码的程序,我需要看看它存储在std :: string中的内容。我一直在谷歌搜索和看这里,我已经找到了一些关于输出STL容器的信息,但它都是指变量,没有源或调试信息,我拥有的是类数据的内存偏移量。有没有办法做到这一点? 解决方案 每个 std :: string 实现有一个指向其中的原始字符的指针。对于 g ++ 4.x ,该指针位于偏移量 0 中。 如果您
..
我浏览了 Google C ++风格指南,发现了这个问题: “不要在命名空间std中声明任何内容,甚至不能声明标准库类的声明。在命名空间std中声明实体是未定义的行为,即不可移植。标准库,包括适当的头文件。“ 有人可以解释这意味着什么,为什么这是未定义的行为使用示例代码? 解决方案 有人能解释这意味着什么,为什么这是未定义的行为使用示例代码? p> 以下程序产生未定义
..
在我的系统上,运行Windows 7 x64,Eclipse Luna和g ++ 4.9.2(通过cygwin安装),似乎std :: stoi从来没有被g ++声明。 根据文档,stoi是字符串库的一部分,所以显然我有 #include 。 此外,我知道stoi是在C ++ 11中引入的,并且我为我的编译器(g ++)设置了适当的标志,即使这看起来像是一个 IDE错误
..