草庐IT

int_types

全部标签

c++ - 当您无法测量差异时如何处理 iterator::difference_type?

我正在为第3方C库编写C++包装器。该库提供了一些用于迭代一系列对象的函数。我想编写一个迭代器来包装此行为,以便迭代更容易,但我想不出我将如何提供强制性的“差异”类型,因为迭代对象没有有意义的相对顺序和API我正在使用不提供提前查找可用对象数量的方法。我无法在迭代时对对象进行计数,因为尽管这可以解决单个迭代器,但它会导致end()迭代器和其他迭代器之间的差异未定义。 最佳答案 C++中的所有迭代器都需要提供某种difference_type。该类型是否有意义或有用是一个完全不同的问题。根据您的描述,您似乎正在使用输入迭代器,它使您能

c++ - 在 2D int vector 上使用 std::fill

我正在尝试将2Dvector中所有元素的值设置为特定值。据我所知,不能像将memset用于数组那样将memset用于vector。因此,我必须使用std::fill将2Dvector中的所有元素设置为特定值。但是,我知道如何对一维vector使用填充,如下所示。vectorlinearVector(1000,0);fill(linearVector.begin(),linearVector.end(),10);但是,当我尝试对2Dvector执行类似操作时(如下所示)它不起作用。vector>twoDVector(100,vector(100,0));fill(twoDVector.b

c++推导 "non type pointer to function"类模板参数

考虑一个模板类:templateclassProxy{voidrun(){ReturnTyperet=Fn();//...dosomething...}};//andafunctionsintfn1(){return5;}floatfn2(){return5;}这可以通过使用实例化:Proxyp1;但是显式声明返回值类型似乎是不必要的。我想要实现的是:someProxyInstantationp1;someProxyInstantationp2;不幸的是,我对c++没有任何期望,这似乎是该语言的一个隐藏角落(至少对我而言)。如果我可以从指向函数的指针获取它的类型——类似于:std::t

c++ - 为什么 "gptr"类型的basic_streambuf是char_type*而不是const char_type*?

设置流缓冲的三个“gptr”的basic_streambuf成员,setg声明为:protected:voidsetg(char_type*gback,char_type*gptr,char_type*egptr);我想知道:为什么每个gptr的类型都是char_type*而不是constchar_type*?在这里使用const_cast为这些gptrs使用constchar指针是否安全? 最佳答案 它不是const,因为streambuf接口(interface)不知道您如何填充缓冲区。例如,underflow和uflow方法可

c++ - boost::unordered_map -- 需要指定自定义哈希函数来散列 std::set<int> 吗?

我想使用boost::unordered_map,其中key是std::set.由于一组整数不是内置类型,我假设我必须提供我自己的散列函数(或者,更确切地说,我正在考虑使用boost'shash_range)。但是,现在我尝试像这样初始化散列映射,既不提供散列函数也不提供相等谓词——而且gcc没有提示。这里发生了什么?boost是否足够聪明,可以自行散列所有STL容器?这会比我使用自定义哈希函数慢吗?使用boost::hash_range怎么样??提前致谢。 最佳答案 根据theBoostdocumentation:thedefau

c++ - 拥有大型二维数组 : static int vs int

在解决DP相关问题时,我观察到第一个有效但第二个段错误。实际原因是什么?仅使用int的内存限制是多少?intmain(){staticinta[3160][3160];return0;}intmain(){inta[3160][3160];return0;} 最佳答案 因为您可能没有足够的堆栈内存来存储这个大数组。第二个示例在堆栈上创建一个数组,而第一个示例创建的数组不在堆栈上而是在数据/Bss段中的某个位置,因为您使用static限定符明确指定了存储条件.注意c++标准没有规定stack或者heap或者datasegment或者B

c++ - Stringstream 到 vector<int>

我想知道从std::stringstream中写入的最佳方式是什么进入vector.这是stringstream中内容的示例:"31#0053253803335342337"这是我得到的:intbuffer=0;vectoranalogueReadings;stringstreamoutput;while(output>>buffer)analogueReadings.push_back(buffer);然而,似乎发生的是,它读取第一件事,然后到达#00并返回0因为它不是数字。理想情况下,我想要的是,它达到#然后跳过所有字符直到下一个空格。这可以用标志或其他东西实现吗?谢谢。

c++ - 打印 int 指针的值

我一直在研究这个,但我似乎无法让它正常工作。我正在返回一个指针列表的最后一个值,我想打印它,但它打印的是一个非常随机的数字。我假设这是指针的内存地址,但是当我取消引用它时,我的输出仍然做同样的事情。我的指针列表是一个指针列表,例如:listpointerList例如,这是我的方法返回:int*end(){return(pointerList.back());}我就是这样调用它的。int*totry=ca.end();cout这是打印内存地址而不是值。有没有人知道如何解决这个问题?提前致谢!编辑:这是int指针指向的内容:我有一个值列表,例如[0,1,2,3,4,5,6,7,8,9,10

c++ - type_info 不考虑 cv 限定符 : is this right?

这段代码打印1是正确的行为还是g++4.5的怪癖?#include#includeusingnamespacestd;intmain(){structA{};cout我认为cv限定符的不同类型作为非常不同的类型受到威胁,即使较少的cv限定类型可以隐式转换为更多cv限定的类型。 最佳答案 typeid根据C++标准(摘自ISO/IEC14882:2003的§5.2.8)忽略cv限定符:Thetop-levelcv-qualifiersofthelvalueexpressionorthetype-idthatistheoperandof

c++ - Variadic 模板和 "expected a type"错误

我正在(主要是出于学习目的)自己实现tuple,我刚刚遇到了一个问题。我有以下代码:namespaceRose{templatestructRemoveReference{typedefTType;};templatestructRemoveReference{typedefTType;};templateclassTuple;templateclassTuple{public:Tuple(Firsta,Elems...more):More(more...),Element(a){}Tuple&operator=(constTuple::Type,RemoveReference::Ty