草庐IT

std-ranges

全部标签

c++ - 如何使用 std::bind?

一个解释如何使用std::bind的简单示例如下:假设我们有一个包含3个参数的函数:f3(x,y,z)。我们想要一个定义为2个参数的函数:f2(x,y)=f3(x,5,y)。在C++中,我们可以使用std::bind轻松地做到这一点:autof2=std::bind(f3,_1,5,_2);这个例子对我来说很清楚:std::bind接受一个函数作为它的第一个参数,然后它接受n个其他参数,其中n是作为函数的参数数量std::bind的第一个参数。不过,我发现了bind的另一种用法:voidfoo(int&x){++x;}intmain(){inti=0;//Bindsacopyofist

c++ - 如何检查 std::string 是否确实是整数?

以下代码将std::string转换为int,问题在于它无法辨别是真正的整数还是随机字符串。有没有系统的方法来处理这样的问题?#include#include#includeintmain(){std::stringstr="H";intint_value;std::istringstreamss(str);ss>>int_value;std::cout编辑:这是我喜欢的解决方案,因为它非常简约和优雅!它不适用于负数,但无论如何我只需要正数。#include#include#includeintmain(){std::stringstr="2147483647";intint_valu

c++ - std::vector<T>::value_type 的正确行为

在对一些使用std::vector::value_type的模板代码中的一些错误摸不着头脑之后,我追踪到了以下内容。这是符合标准的正确行为,还是MSVC2012CTP的问题?typedefstd::vector::value_typet1;typedefstd::vector::value_typet2;static_assert(!std::is_same::value,"hmmm");上述断言失败。 最佳答案 value_type的std::vector是T(§23.3.6.1)。is_same的值将简历限定符考虑在内(§20.

c++ - 为什么 std::istream_iterator 忽略换行符?

我有以下代码:#include#include#includeintmain(){std::stringstreamstr;strit(str),end;for(;it!=end;++it){std::cout输出是:[abcdef][97][98][99][100][101][102]为什么std::istream_iterator忽略换行符? 最佳答案 因为istream_iterator使用operator>>。并且istream::operator>>(char)会跳过空格,除非您取消设置流的skipws标志。(例如使用no

c++ - std::isinf不适用于-ffast-math。如何检查无穷大

样例代码:#include#include#includeusingnamespacestd;staticboolmy_isnan(doubleval){union{doublef;uint64_tx;}u={val};return(u.x0x7ff0000000000000u;}intmain(){coutOnlinecompiler。使用-ffast-math,该代码显示“0,0,1,1”-不显示,则显示“1,1,1,1”。那是对的吗?我认为在这种情况下,std::isinf/std::isnan应该仍然可以与-ffast-math一起使用。另外,如何使用-ffast-math检查

c++ - 将文字分配给 std::u16string 或 std::u32string

据我所知,我可以将一个字面值赋给一个字符串:std::strings="good";std::wstrings=L"good";我如何分配给一个std::u16strings=std::u32strings= 最佳答案 您可以阅读有关C++字符串文字的信息here.特别是对于UTF-16文字,您使用小写字母u作为前缀:u16strings=u"...";对于UTF-32文字,您可以使用大写字母U作为前缀:u32strings=U"..."; 关于c++-将文字分配给std::u16str

c++ - 在 std::map 中打印迭代器的索引

我正在使用std::map的find()方法,它返回一个迭代器。但是我需要找到的元素的索引;例如:0,对应于std::map::begin(),等等。#include#include#includeintmain(){std::mapaMap;aMap.insert(std::make_pair(100,50));aMap.insert(std::make_pair(200,40));aMap.insert(std::make_pair(300,60));std::map::iteratorit_map=aMap.find(300);if(it_map!=aMap.end())std:

c++ - 如何脱离 std::experimental::optional?

使用Boost,我可以创建一个可选的就地:boost::optionalwork=boost::in_place(boost::ref(io_service));并通过以下方式解除它:work=boost::none;有了C++14/实验性支持,我可以改为构建一个可选的就地:std::experimental::optionalwork;work.emplace(boost::asio::io_service::work(io_service));但我不知道如何解除它... 最佳答案 work=std::experimental::

c++ - 为什么 std::condition_variable 的通知和等待函数都需要一个锁定的互斥量

在我对理解std::contion_variable的永无止境的探索中,我遇到了以下问题。在thispage它说了以下内容:voidprint_id(intid){std::unique_locklck(mtx);while(!ready)cv.wait(lck);//...std::cout然后它说:voidgo(){std::unique_locklck(mtx);ready=true;cv.notify_all();}据我所知,这两个函数都将在std::unqique_lock行停止。直到获得唯一锁。也就是说,没有其他线程有锁。假设print_id函数首先执行。将获取唯一锁,函数

c++ - 比较 std::vector 的指针来检查相等性是否安全?

一次,我创建了一个指向std::vector的指针,然后我做了一些push_back、reserve、resize对该vector的操作,在这样的操作之后,将指针与该vector的地址进行比较以检查指针是否指向该vector是否安全,因为可能会重新分配内存。例如std::vectorvec;vector*pVec=&vec;vec.reserve(10000);assert(pVec==&vec);vec=anotherVec;assert(pVec==&vec);此外,将指针与vector的第一个值进行比较是否安全?例如:std::vectorvec(1,0);int*p=&vec[