草庐IT

first_it

全部标签

c++ - *it++ 如何对输出迭代器有效?

在示例代码中,我经常看到输出迭代器的代码如*it++。表达式*it++复制it,递增it,然后返回最终解除引用的拷贝。据我了解,制作输出迭代器的拷贝会使源无效。但是在创建拷贝之后执行的it增量将是非法的,对吗?我对输出迭代器的理解有问题吗? 最佳答案 标准要求*r++=t适用于输出迭代器(24.1.2)。如果它不起作用,则它不是标准定义的输出迭代器。由迭代器实现来确保此类语句在后台正常工作。您不应该保留输出迭代器的多个拷贝的原因是它具有单遍语义。迭代器只能在每个值处取消引用一次(即它必须在每次取消引用操作之间递增)。一旦迭代器被取消

c++ - TCHAR* envp[] : What is it?

我用VisualStudio创建了一个VC++控制台项目,它自动生成了这个函数:int_tmain(intargc,TCHAR*argv[],TCHAR*envp[]){...}我只是想知道envp代表什么以及如何/何时可以/应该使用它?谢谢! 最佳答案 上面的envp参数将存储环境变量。Theenvparray,whichisacommonextensioninmanyUNIX®systems,isusedinMicrosoftC++.Itisanarrayofstringsrepresentingthevariablesseti

python - BLAS/LAPACK 未安装 : How to install it?

我正在尝试为python2.7运行pipinstalltsne,但我不断收到同样的错误。我按照http://bickson.blogspot.com/2011/02/installing-blaslapackitpp-on-amaon-ec2.html上的说明进行操作并安装了我认为应该可以解决问题的LAPACK/BLAS。没有任何帮助。我究竟做错了什么?我对bash不太熟悉。runningbuild_extcythoningtsne/bh_sne.pyxtotsne/bh_sne.cppbuilding'bh_sne'extensioncreatingbuild/temp.linux-

c++ - 调试断言失败!表达式 : __acrt_first_block == header

我正在尝试测试我用GoogleTest编写的dll,当我调用其中一个测试时,它会抛出这个错误:我得出的结论是,问题在于将内存分配给vector,但我不知道如何解决这个问题,因为我对C++编程相当陌生。代码如下:#ArraysCPP11.h#ifdefARRAYSCP11_EXPORTS#defineARRAYSCP11_API__declspec(dllexport)#else#defineARRAYSCP11_API__declspec(dllimport)#endif__declspec(dllexport)voidremoveWhiteSpaces(std::vectorv,st

c++ - 空数据成员优化: would it be possible?

在C++中,大多数优化都源自as-if规则。也就是说,只要程序表现得好像没有进行优化,那么它们就是有效的。空基优化就是这样一种技巧:在某些情况下,如果基类为空(没有任何非静态数据成员),那么编译器可能会省略其内存表示。显然,标准似乎禁止对数据成员进行这种优化,即即使数据成员为空,它仍必须占据至少一个字节的位置:来自n3225,[class]4-Completeobjectsandmembersubobjectsofclasstypeshallhavenonzerosize.注意:这会导致在策略设计中使用私有(private)继承,以便在适当的时候启动EBO我想知道,使用as-if规则是

c++ - 命名对象与临时对象 : Is it better to avoid named objects when possible?

以下是我从一个库的编码风格文档中找到的摘录:Wherepossible,itcanbebettertouseatemporaryratherthanstoringanamedobject,eg:DoSomething(XName("blah"));ratherthanXNamen("blah");DoSomething(n);asthismakesiteasierforthecompilertooptimisethecall,mayreducethestacksizeofthefunction,etc.Don'tforgettoconsiderthelifetimeofthetempo

c++ - 我可以使用 std::pair,但重命名 .first 和 .second 成员名称吗?

我遇到的一个常见设计问题是,我将两个变量捆绑在一起,然后失去以有意义的方式引用它们的能力。std::paircords;cord.first=0;//is.firstthexorycoordinate?cord.second=0;//is.secondthexorycoordinate?我考虑过编写基本结构,但是我失去了很多std::pair:带来的好处make_pair非成员重载运算符交换得到等等有没有办法为first和second数据成员重命名或提供替代标识符?我希望利用所有接受std::pair的函数,但仍然可以通过以下方式使用它们:std::paircords;//specia

c++ - ARRAYSIZE C++ 宏 : how does it work?

好的,我不是完全新手,但我不能说我理解以下宏。最令人困惑的部分是将value转换为size_t的除法:这到底完成了什么?特别是,因为我看到一个否定运算符,据我所知,它可能会导致零值。这是否意味着它会导致被零除的错误?(顺便说一下,宏是正确的,而且效果很好。)#defineARRAYSIZE(a)\((sizeof(a)/sizeof(*(a)))/\static_cast(!(sizeof(a)%sizeof(*(a))))) 最佳答案 第一部分(sizeof(a)/sizeof(*(a)))相当简单;它将整个数组的大小(假设您将宏

c++ - 关于如何识别 Rvalue 或 Lvalue 引用和 if-it-has-a-name 规则

我正在阅读ThomasBecker的article关于右值引用及其使用。在那里,他定义了他所谓的if-it-has-a-name规则:Thingsthataredeclaredasrvaluereferencecanbelvaluesorrvalues.Thedistinguishingcriterionis:ifithasaname,thenitisanlvalue.Otherwise,itisanrvalue.这对我来说听起来很合理。它还清楚地标识了右值引用的右值性。我的问题是:你同意这个规则吗?如果没有,您能否举一个可能违反此规则的示例?如果没有违反这条规则。我们可以使用此规则来

c++ - Ceil 函数 : how can we implement it ourselves?

我知道C++为我们提供了一个ceil函数。为了练习,我想知道如何在C++中实现ceil函数。该方法的签名是publicstaticintceil(floatnum)请提供一些见解。我想到了一个简单的方法:将num转换为字符串,找到小数点的索引,检查小数部分是否大于0。如果是,则返回num+1,否则返回num。但我想避免使用字符串转换 最佳答案 你可以拆开一个IEEE754float的成分,自己实现逻辑:#includefloatmy_ceil(floatf){unsignedinput;memcpy(&input,&f,4);int