草庐IT

c++ - vector 和 map 抛出异常

我的任务是输出所有十位数字,其中数字不重复。我首先使用的是这样的东西:#include#include#include#include#includeusingnamespacestd;voidTask5(){autoinitialization=[](map*m,intcount){for(inti=0;i*m,intcount,intvalue){for(inti=9;i>count;--i)m[count][i][value]=false;};/*Forcreatecopymap*/automould=[](map*m,map*m_copy,intcount)->map*{if(

具有全局变量的 C++ 多线程

有人知道原始全局变量是否线程安全吗?//globalvariableintcount=0;voidthread1(){count++;}voidthread2(){count--;if(count==0)print("Stuffthing");}我可以在没有对count进行任何锁定保护的情况下这样做吗?谢谢。 最佳答案 这不是线程安全的。你在这里有一个竞争条件。原因是count++不一定是原子的(意味着不是单个处理器操作)。该值首先加载,然后递增,然后写回。在每个步骤之间,另一个线程也可以修改该值。

局部变量的 C++ lambda 词法闭包

总结在C++中,当我从捕获该函数局部变量的函数返回lambda时,具体会发生什么,为什么?编译器(g++)似乎允许这样做,但它给我的结果与我预期的不同,所以我不确定这在技术上是否安全/受支持。详情在某些语言(Swift、Lisp等)中,您可以在闭包/lambda中捕获局部变量,只要闭包在范围内,它们就保持有效并在范围内(我听说它称为“lambdaover在Lisp上下文中放弃lambda”)。例如,在Swift中,我尝试做的示例代码是:funccounter(initial:Int)->(()->Int){varcount=initialreturn{count+=1;returnco

c++ - 递归计算变量模板值

这就是我正在努力(但失败)的工作。这个想法是count必须等于N.这是一个更复杂计算的简化案例,请不要介意这段代码明显的愚蠢。templateconstexprsize_tcount=0;templateconstexprsize_tcount=1+count(N)-1>;intmain(){returncount;}它不编译::5:23:error:expectedinitializerbefore'=0;^如果我将一般情况与特化交换,它也不会编译。它甚至可以使用变量模板吗?Tryitonline 最佳答案 这是正确的代码版本:t

c++ - C++ `recv` 函数如何处理数据接收?它能收到部分 "packet"吗?

staticvoidHandlePackets(void*pParams){intiResult=0;charrecvbuf[MAX_PACKET_LENGTH];printf("Packethandlingstarted\n");while((iResult=recv(lhSocket,recvbuf,MAX_PACKET_LENGTH,0))>0)printf("Bytesreceived:%d\n",iResult);printf("Packethandlingstoppedwithreason%i",WSAGetLastError());}目前,它只打印接收到的字节数。会不会发

c++ - g++ 可变参数模板。简单示例代码无法编译,提示 'Not a template'

我正在探索这个陌生的领域,并想尝试来自DannyKalev'stutorialonthematter的一个简单示例.代码非常简单:templatestructCount{staticconstintvalue=0;};templatestructCount//partialspecialization{staticconstintvalue=1+Count::value;};但是gcc4.4.7甚至4.7.0提示(尽管-std=c++0x-std=gnu++0x标志):/src/tests/VTemplates.h:12:8:error:'Count'isnotatemplate/sr

c++ - 私有(private)静态声明和后续初始化

一个.cpp文件有一堆类定义。一个类有一个私有(private)静态成员,如下所示:classSomeClass:publicSomeParentClass{private:staticintcount;};并且在类定义之后,计数属性初始化为零,如下所示:intSomeClass::count=0;来自Java/C#世界,我无法理解count在哪一点初始化为零?是在SomeClass被实例化的时候吗?此外,类定义的count类型为int,为什么SomeClass::count必须有一个int前面呢?我的最后一个问题是,既然count属性是私有(private)的,当它在类定义之外初始化

c++ - 为什么来自 Bjarne 的 "Tour of C++"的代码有效?

如果我们将一个数组传递给函数,我们将遍历它直到“p”是一个nullptr。但这永远不会发生,因为数组中最后一个值为0的元素之后的地址不是nullptr(没有零值)。这怎么可能?intcount_x(char*p,charx)//countthenumberofoccurrencesofxinp[]//pisassumedtopointtoazero-terminatedarrayofchar(ortonothing){intcount=0;while(p){if(*p==x)++count;++p;}returncount;} 最佳答案

c++ - boost shared_ptr use_count 函数

我的申请问题如下-我有一个大结构foo。因为它们很大并且出于内存管理的原因,我们不希望在数据处理完成后删除它们。我们将它们存储在std::vector>.中我的问题与了解所有处理何时完成有关。第一个决定是我们不希望任何其他应用程序代码在结构中标记一个完整的标志,因为程序中有多个执行路径,我们无法预测哪一个是最后一个。因此在我们的实现中,一旦处理完成,我们将删除boost::shared_ptr>的所有拷贝除了vector中的那个。这会将shared_ptr中的引用计数器降为1。使用shared_ptr.use_count()查看它是否等于1以了解我的应用程序的所有其他部分何时处理完数据

c++ - 防止长时间运行平均溢出?

假设我想计算一个数据集的平均值,例如classAverager{floattotal;size_tcount;floataddData(floatvalue){this->total+=value;returnthis->total/++this->count;}}total或count值迟早会溢出,所以我让它不记得总值:classAverager{floatcurrentAverage;size_tcount;floataddData(floatvalue){this->currentAverage=(this->currentAverage*count+value)/++count