草庐IT

c++ - 容器使用的内部类型的内存分配

C++11标准在一般容器要求中有以下几行。(23.2.1-3)Forthecomponentsaffectedbythissubclausethatdeclareanallocator_type,objectsstoredinthesecomponentsshallbeconstructedusingtheallocator_traits::constructfunctionanddestroyedusingtheallocator_traits::destroyfunction(20.6.8.2).Thesefunctionsarecalledonlyforthecontainer’

c++ - 不使用 odr 的数组计数?

有几个很好的理由去选择#includetemplateconstexprstd::size_tARRAY_COUNT_FUNC(T(&arr)[N]){returnN;}而不是#defineARRAY_COUNT_MACRO(arr)(sizeof(arr)/sizeof(*arr))一个重要的区别是,当一个指针(不是数组)被传递给ARRAY_COUNT_MACRO时,它会默默地返回一个无用的答案,但是将相同的参数传递给ARRAY_COUNT_FUNC会导致编译错误指出错误。但是宏确实有一个优点:它的参数是未计算的。#includestructS{intmember_array[5];

c++ - 如何通过引用传递子字符串?

我递归调用一个函数,将一个子字符串作为参数传递,该子字符串始终从当前字符串的开头开始直到某个位置。如果我使用C,我可以将指针传递到字符串的第一个位置,然后是必要的长度。不过,我想使用string类来获得相同的结果。可能吗?如果我使用const,编译器是否足够智能以自行进行优化?更好的是,有没有办法自行检查编译器是否实际复制了参数或传递了引用?我的问题是在编写了以下通过问题Alphacode测试的代码之后产生的在poj上,一旦有人使用atoi而不是atof。#include#include#include#include#includeusingnamespacestd;mapcache

c++ - binary_search 与 std::pair 使用自定义运算符

我正在尝试进行binary_search,包括一个整数对vector和一个整数,如下所示:#include#includeusingnamespacestd;typedefvector>int_pairs;booloperator&r){returnr.first(1,2));pairs_vec.push_back(pair(2,2));size_ti(2);binary_search(pairs_vec.begin(),pairs_vec.end(),i);}编译器告诉我operator未定义:erreur:nomatchfor‘operator’)我的做法是否正确?我尝试以多种不同

c++ - 为什么 GCC 中 std::list O(n) 的 size() 方法?

在GCC中,std::list的size()方法是O(n)。为什么?对于C++11,标准是size()oflistshouldbeO(1)但是在glibc中我们有以下内容:/usr/include/c++/4.6.3/bits/stl_list.htemplate>classlist:protected_List_base{...size_typesize()const{returnstd::distance(begin(),end());}问题是:为什么三年前的要求还没有在GCC中实现?编辑:gcc5改变了这一点:尽管以ABI改变为代价;这意味着使用gcc5.0编译的C++代码将无法

c++ - 可变嵌套循环

我正在处理N维网格。我想根据任何维度(2D、3D、4D等...)生成嵌套循环。我怎样才能优雅而快速地做到这一点?下面是我的问题的简单说明。我正在用C++编写,但我认为这种问题对其他语言也很有用。我需要知道dostuff部分中的索引(i,j,k...)。编辑:lower_bound和upper_bound代表网格中的索引,因此它们始终为正数。#includeintmain(){//Dimensionhereis3Dstd::vectorlower_bound({4,2,1});std::vectorupper_bound({16,47,9});for(size_ti=lower_boun

C++ - 你应该用一个常规数组来调整大小吗?

我对size_t感到困惑。我知道这是一个无符号类型..对吗?我的问题是,什么时候应该使用它。是否有理由将其与常规数组一起使用?我的意思是必须将数组大小声明为非常大,大到常规的无符号或有符号数组无法处理它。然后size_t就可以处理它了吗?有人可以给我举个例子吗? 最佳答案 根据ISOIEC14882:2011(E)§18.26Thetypesize_tisanimplementation-definedunsignedintegertypethatislargeenoughtocontainthesizeinbytesofanyob

C++ 将 vector 拆分为 n 个 vector 的最佳方法

我有一个std::vector在这个vector中我push_back来自txt文件的字符串,如下所示:std::stringline;std::vectorpath;while(getline(fichier,line)){path.push_back(line);}我想拆分路径vector进入n其他vector例如10行。所以如果我的vector的大小是25,我想要另外2个包含10个元素的vector和一个vector5个元素。最好的方法是什么? 最佳答案 最好是一个见仁见智的问题,但您可以执行以下操作(bunch_size为1

c++ - 使用迭代器查找 vector 的中间元素 - C++

我有两个问题。第一个问题我正在阅读C++primer5thedition一书中关于C++的迭代器。在本书的一个代码示例中,给出了以下代码片段将找到vectorvi中的中间元素automid=vi.begin()+vi.size()/2;现在我想问一下,为什么在vi.size()中加入了vi.begin()?vi.size()/2是否足以找到vectorvi中的中间元素?第二个问题automid=vi.begin()+vi.size()/2;在此代码片段中,如果我像这样在vi.begin()+vi.size()周围添加括号:automid=(vi.begin()+vi.size())/2

c++ - 复制构造函数和赋值运算符实现选择 -

我最近重新访问了这里看到的复制构造函数、赋值运算符、复制交换idom:Whatisthecopy-and-swapidiom?和许多其他地方-上面的链接是一篇很棒的帖子-但我还有几个问题-这些问题在很多地方都有答案,在stackoverflow和许多其他网站上,但我没有看到很多一致性-1-你是否应该在我们为复制构造函数中的深层复制分配新内存的区域周围使用try-catch?(这两种方式我都看到了)2-关于复制构造函数和赋值运算符的继承,什么时候应该调用基类函数,什么时候这些函数应该是虚函数?3-std::copy是在复制构造函数中复制内存的最佳方式吗?我用memcpy看过它,也看到其他