草庐IT

-std=gnu99

全部标签

c++ - std::list resize 给出意想不到的结果

我只是在学习,有一个可能很愚蠢的问题。我有2个容器,一个是vector,一个是列表。它们都填充了整数1、2、3、4。初始化后,我将容器大小调整为7,然后打印容器的内容。#include#include#includeintmain(){std::listlst={1,2,3,4};std::vectorvec={1,2,3,4};lst.resize(7);vec.resize(7);for(autop=lst.begin();p!=lst.end();++p)std::cout在我得到的输出中:List:1List:2List:3List:4List:0List:1994995248

c++ - std::atomic<uint_least8_t> 行为

在一个系统上:typedefunsignedcharuint8_t;typedefunsignedshortuint16_t;std::atomic::is_always_lock_free//=>falsestd::atomic::is_always_lock_free//=>true据我了解,类型std::atomic将是8位并且不是无锁的。如果是这样,如果我想要一个至少8位且始终无锁的原子类型,我应该怎么写?(假设存在这种类型)是否有比以下更好的选择:std::atomic::is_always_lock_free,uint8_t,uint16_t>::type>(为简单起见,我

c++ - 在 std::function 中存储不可复制但可移动的对象

假设我有一个不可复制但可移动的仿函数s,我如何将它存储在std::function中?即,如何编译以下代码?(使用gcc4.6)#include#includestructS{S()=default;S(Sconst&)=delete;S&operator=(Sconst&)=delete;S(S&&){}voidoperator()(){}};std::functionfunc;voidmake_func(){Ss;func=std::bind(std::move(s));//Thiswon'tcompile}intmain(){make_func();}

c++ - 为什么 std::sort 和 partial_sort 需要随机访问迭代器?

我想知道为什么c++标准要求std::sort应该只采用随机访问迭代器?我没有看到优势,因为std::sort和std::list::sort复杂度为N*log(N)。将std::sort限制为随机访问迭代器(RAI)似乎使得有必要为具有相同复杂性的列表编写单独的函数。这同样适用于partial_sort,其中列表的非RAI对应部分issimplymissing直到今天。这种设计是因为人们使用quick_sort的变体来实现std::sort吗?如果在RAI容器上编写排序算法有优势,是否最好使std::sort更通用,并让RAI容器像std::vector提供专门的v.sort?

c++ - 这是 std::get_time 中的错误吗?

我正在尝试解析日期时间字符串并将结果放入std::tm结构中。下面是代码,#include#include#include#includestd::stringstreamss;structstd::tmwhen;ss.str("8/14/20153:04:23PM");ss>>std::get_time(&when,"%m/%d/%Y%r");运行代码后,when.tm_hour为27。这是一个错误,还是我做错了什么?我在Windows7上使用VisualStudio2013。谢谢。 最佳答案 您在Microsoft的std::n

c++ - 为什么 std::(i)ostream 将有符号/无符号字符视为文本而不是整数?

这段代码没有做它应该做的事情:#include#includeintmain(){uint8_tsmall_integer;std::cin>>small_integer;std::cout原因很简单:uint8_t是unsignedchar的类型定义流将此类型视为文本:VisualC++2015实现templateinlinebasic_istream&operator>>(basic_istream&_Istr,unsignedchar&_Ch){//extractanunsignedcharreturn(_Istr>>(char&)_Ch);}还有一个类似的代码转换为char对于

c++ - 使用 C 样式字符串文字与构造未命名的 std::string 对象的默认建议?

因此,C++14引入了许多要使用的用户定义文字,其中之一是"s"literalsuffix,用于创建std::string对象。根据文档,其行为与构建std::string完全相同。对象,像这样:autostr="HelloWorld!"s;//RHSisequivalentto:std::string{"HelloWorld!"}当然构建一个未命名的std::string对象可以在C++14之前完成,但是因为C++14的方式要简单得多,我认为更多的人实际上会考虑构建std::string现场的物体比以前多,这就是为什么我认为提出这个问题是有道理的。所以我的问题很简单:在什么情况下,构

c++ - 为什么没有 std::inplace_merge 是唯一的?

我试图寻找一种算法来执行std::inplace_merge的操作其次是std::unique会做。似乎在1次通过中比在2次中更有效。无法在标准库中或通过oogling找到它。那么在boost的某个地方是否有不同名称的实现?这样的算法是否可行(从某种意义上说,它具有与普通inplace_merge相同的复杂性保证)? 最佳答案 它不就地运行,但假设事先两个范围都不包含重复项,std::set_union将找到与合并后跟唯一相同的结果。 关于c++-为什么没有std::inplace_me

c++ - 为什么在返回兼容类型时需要显式 std::move?

我正在看STL的“Don’tHelptheCompiler”演讲,他在幻灯片26上有一个类似的例子:structA{A()=default;A(constA&){std::coutget_pair(){std::pairp;returnp;}std::tupleget_tuple(){std::pairp;returnp;}std::tupleget_tuple_moved(){std::pairp;returnstd::move(p);}有了这个,下面的调用:get_pair();get_tuple();get_tuple_moved();产生这个输出:movedmovedcopie

c++ - std::sort 自定义比较器

在下面的代码中,为什么IntComparator()、IntComparator2和IntComparator3这三个都作为的第三个参数排序()函数?他们不会有不同的左值函数类型吗?基于https://en.cppreference.com/w/cpp/algorithm/sort它说Thesignatureofthecomparisonfunctionshouldbeequivalenttothefollowing:boolcmp(constType1&a,constType2&b);哪个似乎更匹配IntComparator2?还有哪一个更可取?第三个选项似乎更简单、更直观。#inc