草庐IT

c++ - size_t 参数新运算符

我有一点想不通新运算符重载。假设,我有一个类MyClass但MyClass.hMyClass.cpp和main.cpp文件是这样的;//MyClass.hclassMyClass{public://Somememberfunctionsvoid*operatornew(size_tsize);voidoperatordelete(void*ptr);//...};//MyClass.cppvoid*MyClass::operatornew(size_tsize){returnmalloc(size);}voidMyClass::operatordelete(void*ptr){free

c++ - 在 C++ 中返回假对象引用的规则

我想使用自定义容器遍历预分配的float组,该容器不拥有数据,但作用于数据的一部分。例如,命名容器类LinhaSobre:std::unique_ptrdata(newfloat[720]);...//createscontainertoiterate26floatsstartingfromfromdata[12]LinhaSobrecont(data.get()+12,26);//setsthoseelementsto1.5for(size_ti=0;i这是operator[]的可能实现://...//LinhaSobrehasamembermem0whichisinitialize

c++ - STL bitset::count() 方法的性能如何?

我四处搜索,找不到bitset::count()的性能时间规范。有人知道它是什么(O(n)或更好)以及在哪里可以找到它吗?编辑由STL我仅指标准模板库。 最佳答案 我在我的电脑上读取了这个文件(C:\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++\bitset)。看这些///Returnsthenumberofbitswhichareset.size_tcount()const{returnthis->_M_do_count();}size_t_M_do_count()const{si

c++ - 为什么将 map 元素设置为它的大小会在*分配之前*增加大小?

这是我用来在token进入时对其进行索引的常用模式:检查token是否在map中,如果不在,则将其添加到map,并指定map的大小。在C++中执行此操作时,它会在分配完成之前意外地增加map的大小:#include#includeusingnamespacestd;intmain(){mapm;printf("Sizebeforeadding:%d\n",m.size());m['A']=m.size();printf("Sizeafteradding:%d\n",m.size());printf("Whatwasadded:%d\n",m['A']);return0;}打印出来:Si

c++ - 在 xcode C++ (lldb) 中查看动态数组的内容

如何在xcode调试器(C++)中查看动态创建的数组的内容?intmain(intargc,constchar*argv[]){int*v;intsize;cout>size;v=newint[size];for(inti=0;i>v[size];}//seearraycontentsreturn0;}我想查看v的内容 最佳答案 我们没有在表达式解析器中添加一些语法,例如gdb"@"语法,因为我们希望使语言语法尽可能接近C/ObjC/C++。相反,由于您要执行的任务是“读取一些内存作为T类型的N个元素的数组”,您可以使用:(lldb

c++ - 为什么 C++ 与动态数组的乘法比 std::vector 版本更好

我正在为具有不同数据结构和技术(vector、数组和OpenMP)的矩阵实现C++乘法,我发现了一个奇怪的情况……我的动态数组版本运行得更好:次数:openmpmult_1:time:5.882000sarraymult_2:time:1.478000s我的编译标志是:/usr/bin/g++-fopenmp-pthread-std=c++1y-O3C++vector版typedefstd::vector>matrix_f;voidmult_1(constmatrix_f&matrixOne,constmatrix_f&matrixTwo,matrix_f&result){consti

c++ - 将二维数组元素复制到另一个具有另一个大小的二维数组

我试图将二维数组复制到另一个大小不同的数组。例如:第一个4行4列的数组:12345678901234562行8列的第二个数组:1234567890123456如果新数组中的元素多于第一个元素,则函数将用0填充它这是我做的功能,但是索引有问题。如何以正确的方式编写它?voidchangearr(int**ppm,intsize1,intsize2,intsize_1,intsize_2){int**temp=newint*[size_1];for(inti=0;i 最佳答案 哦哦哦,多么好的编程难题。我的解决方案是展平两个数组并复制它

c++ - 对重载函数模板的模糊调用 - 即使一个更专业?

考虑以下几点:#includetemplateusingsize_=std::integral_constant;templatevoidf(size_,size_)//(1){}template//(2)voidf(size_,size_){}intmain(){f(size_{},size_{});}gcc和clang都报告调用不明确。为什么?不是(1)比(2)更专业?注意:我知道这很容易通过额外的enable_if_tFrom+1)>修复扔进(2),但我不认为我需要这样做。 最佳答案 毫不奇怪,CWG问题中的一个类似示例解决了

c++ - std::string 实现是否符合 's.c_str() + s.size()' 不一定与 '&s[s.size()]' 相同?

§21.4.5[string.access]const_referenceoperator[](size_typepos)const;referenceoperator[](size_typepos);Returns:*(begin()+pos)ifpos.Otherwise,returnsareferencetoanobjectoftypecharTwithvaluecharT(),wheremodifyingtheobjectleadstoundefinedbehavior.至少对我来说,第二部分意味着这个“charT类型的对象”可能位于存储在std::string中的序列之外。目

c++ - For循环索引类型推导最佳实践

比方说,我有一个容器c类型,它提供了一个size()方法,我想遍历这个容器,同时跟踪每个项目的索引:for(/*TODO*/i=0;i在后C++11时代,自动类型推导可以很好地解决许多问题。我们应该用什么来代替上面的TODO?无论size()的类型是什么,对我来说唯一正确的是:for(decltype(c.size())i=0;i但这似乎过于冗长,而且在我看来,不利于可读性。另一种解决方案可能是这样的:for(autoend=c.size(),i=0;i但这也无助于提高可读性,当然,与原始片段的语义也不相同。所以,我的问题是:在仅给定索引限制的类型的情况下,推断循环索引变量类型的最佳方