草庐IT

count_val

全部标签

c++ - boost shared_ptr use_count 函数

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

c++ - if((int val = getvalue()) == x) 表格是否应该工作

此表单无法使用我的VS2008编译器进行编译。应该可以吗?#includeusingnamespacestd;intgetvalue(){return3;}intmain(intargc,char*argv[]){if((intval=getvalue())==3)cout这个表格确实有效。...intval;if((val=getvalue())==3)...为什么不起作用? 最佳答案 这是不合法的,因为你不能将语句用作表达式。因此,不是在if中声明变量是非法的,而是比较。就像:(intx=3)==3;是非法的,而intx=3;x

c++ - 共享指针不增加 use_count

我正在尝试了解如何在C++中使用std::shared_ptr。但这很令人困惑,我不明白如何创建指向同一对象的多个共享指针。甚至文档和在线资料也不是很清楚。以下是我编写的一小段代码,用于尝试理解std::shared_ptr的行为:#include#includeusingnamespacestd;classNode{public:intkey;Node(){key=0;}Node(intk){key=k;}};intmain(){Nodenode=Node(10);shared_ptrptr1((shared_ptr)&node);coutptr2=make_shared(node)

c++ - 使用 const 键类型引用调用 std::set of pointers 的 count 方法

我有一个类structS{boolfoo(constAType&v)const{returnvalues.count(&v);//compileerrorduetotheconstnessofv}private:std::setvalues;};这是一个简化版本。在实际代码中,foo做了一些复杂的事情。代码产生错误invalidconversionfrom‘constAType*’to‘std::set::key_type{akaAType*}’我认为foo应该采用'constAType&v'因为它不会改变v。成员变量“values”的类型不能为std::set,因为结构S的某些方法调

c++ - valarray 上 STL 算法 "count"的返回类型是什么

我正在使用VisualStudio2010Pro在Windows764bit上机器,我想使用count(来自header)在valarray上:intmain(){valarrayv(false,10);for(inti(0);i上面程序的输出是正确的:4但是我想将值分配给变量并使用int导致编译器警告精度损失。自valarray没有迭代器,我不知道如何使用iterartor::difference_type.这有可能吗? 最佳答案 Num的正确类型会是:typenameiterator_traits::difference_typ

c++ - 这个 bitset::count() 的实现是如何工作的?

下面是std::bitset::count与MSVC2010的实现:size_tcount()const{//countnumberofsetbitsstaticchar_Bitsperhex[]="\0\1\1\2\1\2\2\3\1\2\2\3\2\3\3\4";size_t_Val=0;for(int_Wpos=_Words;0>=4)_Val+=_Bitsperhex[_Wordval&0xF];return(_Val);}有人可以向我解释这是如何工作的吗?_Bitsperhex有什么诀窍? 最佳答案 _Bitsperhex

c++ - 为什么没有给 std::forward_list 一个 count() 成员函数?

我明白为什么std::forward_listdoesnothaveasize()memberfunction,因为O(1)版本会搞乱某些splice()的复杂性过载,并且由于O(N)version将与标准库的所有其他容器不一致。这也是事实std::list和std::forward_list已经有几个其他成员函数与中的表亲具有相同的语义标准库的一角(merge()、reverse()、remove()、remove_if()、unique()、sort())。那么为什么不是count()O(N)的成员函数提供给std::forward_list的复杂性具有返回std::distanc

c++ - 我可以在不更改 use_count 的情况下将 shared_ptr<T> & 转换为 shared_ptr<T const> & 吗?

我有一个使用boost::shared_ptr的程序s,特别是依赖于use_count的准确性执行优化。例如,假设一个加法运算有两个参数指针lhs和rhs。假设他们都有类型shared_ptr.当需要执行加法时,我会检查use_count,并且如果我发现其中一个参数的引用计数恰好为1,那么我将重新使用它来就地执行操作。如果两个参数都不能重用,我必须分配一个新的数据缓冲区并执行异地操作。我正在处理庞大的数据结构,因此就地优化非常有用。因此,我永远无法复制shared_ptr没有理由,即每个函数都采用shared_ptrs通过引用或const引用以避免扭曲use_count.我的问题是:我

c++ - std::vector<T>::resize( n, val ) 是否足以进行初始化?

这是一个特定于C++11的问题。假设我有一个vectorstd::vectorv已经使用过,我想将其调整为n使用现有值初始化的元素Tval.(典型用例:vector是被回收实例的成员)。以下几种方式各有什么优缺点,哪种方式效率最高?1)是std::vector::resize(n,val)足以进行初始化吗?v.clear();v.resize(n,val);2)如果不是,那么我假设以下是正确的?v.clear();v.resize(n);std::fill(v.begin(),v.end(),val);3)交换怎么样?v.swap(std::vector(n,val));

c++ - G++ CAS (__sync_val_compare_and_swap) 问题需要解释

这让我很头疼。我正在尝试实现一些“无锁”代码并使用CAS(gcc__sync_val_compare_and_swap)来完成繁重的工作。我的问题可以用下面的代码显示。volatileboollock;void*locktest(void*arg){for(inti=0;i好的,如果我在10个并发线程中运行上面的代码,一切都很好。但是,如果我将代码改为阅读//acquirealockwhile(__sync_val_compare_and_swap(&lock,lock,true)==true)请注意,我已将“false”更改为“lock”。一切都乱套了,断言//makesureweh