草庐IT

c++ - 为什么我不能将 std::unique_ptr 用作 "template<class> class"参数?

这段代码:#includetemplateclassPtr>classA{Ptrints;};usingB=A;产生以下错误(使用GCC6.3):a.cpp:6:28:error:type/valuemismatchatargument1intemplateparameterlistfor‘templateclassPtr>classA’usingB=A;^a.cpp:6:28:note:expectedatemplateoftype‘templateclassPtr’,got‘templateclassstd::unique_ptr’现在,我可以像这样解决这个问题:templateu

c++ - 为什么 std::map 有一个 find 成员函数?

我和一位同事正在讨论成员职能与非成员职能的相对优点。一个问题出现了:为什么std::map有一个find成员函数。我的回答是,虽然您可以在map上使用std::find,但您必须搜索键值对,或者使用find_if和例如一个lambda。然而,这是线性的,map.find提供了比线性时间更好的按键搜索。我最后断言,如果它可能是非成员(member),那么它本来就是!(尽管std::string表明我的概括可能有些草率)。我的同事指出,可以使用map.lower_bound以与非成员函数相同的方式实现find。map.find成为成员(member)是否有理由?

c++ - 如何测试 std::memory_order_relaxed 的行为?

我已经阅读了std::memory_order_relaxed的文档.Relaxedordering的部分解释是......//Thread1:r1=y.load(memory_order_relaxed);//Ax.store(r1,memory_order_relaxed);//B//Thread2:r2=x.load(memory_order_relaxed);//Cy.store(42,memory_order_relaxed);//D对此的解释是……[It]isallowedtoproducer1==r2==42.Inparticular,thismayoccurifDisc

c++ - 如何将 priority_queue 与类实例的非静态比较方法一起使用?

假设我有一个像这样的简单类:classTest{public:Test(intreference){m_reference=reference;}voidfeed(intx){m_data.push_back(x);}intget(){returnm_data.front();}private:intm_reference;std::vectorm_data;};而不是std::vector,我想将值输入std::priority_queue.我不想返回.front()值,而是想.get().top()值priority_queue基于自定义比较函数。假设此自定义比较计算为值与实例re

c++ - 如何将 C++ 数字格式设置为一定的精度?

我知道您可以使用iomanip为float设置精度标志(例如,有2.0000而不是2.00)。对于整数,有没有办法做到这一点?我希望十六进制数显示为000e8a00而不仅仅是e8a00或00000000而不是0。这在C++中是否可行,使用标准库? 最佳答案 使用操纵器:std::cout没有操纵器:std::cout.fill('0');std::cout.width(8);std::cout.setf(std::ios::hex,std::ios::basefield);std::cout

c++ - 迭代 std::vector(没有迭代器)时使用哪种类型?

也许这个问题是微不足道的,但再想想我想知道如何真正正确地做以下事情:std::vectorv=...;for(Ti=0;iT应该是什么类型?int、unsignedint、int32_t、size_t(这将是v.size())或任何其他建议?请尝试考虑可移植性、易错性和性能,并在您的回答中保持客观。编辑:我没有选择迭代器,因为它也想显式使用索引号i。 最佳答案 i的类型应与size()的返回值相同,即std::vector::size_type.然而,在实践中,size_t会做的很好。如果您使用有符号整数类型,那么您的编译器可能会警

c++ - std::vector<char> 中元素的字节对齐方式是什么?

我希望元素是1字节对齐的,类似于std::vector是4字节对齐的(或任何大小int恰好在特定平台上)。有谁知道标准库容器是如何对齐的? 最佳答案 容器的元素至少在该实现中具有它们所需的对齐方式:ifint在您的实现中是4对齐的,那么vector的每个元素是一个int因此是4对齐的。我说“如果”是因为大小和对齐要求之间存在差异-只是因为int就标准而言,大小为4并不一定意味着它必须是4对齐的。不过,这很常见,因为int通常是机器的字长,并且大多数机器在字边界上的内存访问方面具有优势。所以对齐int是有意义的即使这不是绝对必要的。例

c++ - 在命令行中创建菜单

如何在命令行程序中创建菜单?我尝试过类似的东西:cin>>input;switch(input){case(1)://dostuffcase(2)://...}但后来我遇到了子菜单的问题,并返回到相同的菜单等。我编写的第一个程序(除了练习之外)尝试使用switch想法因为菜单有goto语句,因为替代方案是一堆(当时)复杂的循环。 最佳答案 如果我试图计算一个人可能创建1、2、3菜单的方式,那么在我迭代其中的1/2之前我们都已经死了。但这里有一种您可以尝试让您入门的方法(未经测试,您可能需要清理一些东西):structmenu_ite

c++ - 当 >> 字符串流时更改双引号的行为

这是我正在尝试做的事情:假设我有一个字符串流。然后我然后当我做sstr>>myString1>>myString2;我希望myString1有“helloworld”并且myString2有“今天”有没有办法(可能是通过操纵器)实现这一点?谢谢 最佳答案 简短回答:否长答案:没有任何操作可以为您做到这一点。替代答案:您可以编写自己的类型,与流运算符结合使用来完成此任务。#include#include#include#include#includeclassQuotedWord{public:operatorstd::stringc

c++ - 被 const 逼入绝境:std::map::find() const 重载

考虑以下片段:#includeclassC{public:C(){}constint&f(constint&x)const{//Error:cannotcastconstint*toint*constreturnmyMap.find(&x)->second;//Withaconst_castworks://returnmyMap.find(const_cast(&x))->second;}std::mapmyMap;};int_tmain(intargc,_TCHAR*argv[]){intx=0;Cc;c.f(x);return0;}f()中的错误是由map的find()的const