草庐IT

array_size

全部标签

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++ - 字符串匹配 : Computing the longest prefix suffix array in kmp algorithm

KMPalgorithmforstringmatching.以下是code我在网上找到了计算最长前缀-后缀数组的方法:定义:lps[i]=thelongestproperprefixofpat[0..i]whichisalsoasuffixofpat[0..i].代码:voidcomputeLPSArray(char*pat,intM,int*lps){intlen=0;//lengthofthepreviouslongestprefixsuffixinti;lps[0]=0;//lps[0]isalways0i=1;//theloopcalculateslps[i]fori=1toM

Python中Numpy的np.array详解

np.array用于创建一个新的NumPy数组对象。其语法如下:np.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)object:任何可用于初始化新数组的对象,例如列表、元组、数组等。dtype:新数组的数据类型。如果未指定,则会从输入对象中推断数据类型。其他参数允许进一步控制新数组的创建。返回一个新的NumPy数组。示例importnumpyasnpa=np.array([1,2,3,4])#a=array([1,2,3,4])b=np.array([[1,2],[3,4]])#b=array([[1,2],#

c++ - constexpr std::array with static_assert

#include#includeintmain(intargc,char**argv){constexprconststd::arrayarr{{0,1}};constexprconstintarr2[]={0,1};static_assert(arr[0]==arr2[0],"asdf");static_assert(arr[1]==arr2[1],"asdfasdf");return0;}当使用gcc4.8.2和4.9.1使用g++test.cpp--std=c++11编译时,编译成功。但是,当使用clang++test.cpp--std=c++11使用clang3.4和3.5编译

c++ - 捕获最后一个 WM_SIZE

当我调整窗口大小时,我想告诉程序的另一部分我的窗口已更改大小。我在MSDN上阅读那:WMSIZE消息WMSIZE消息在窗口大小更改后发送到窗口。但是,即使在拖动时我也会收到WM_SIZE。我注意到在调整窗口大小时还会发送一条WM_SIZING消息。目前我看不出WM_SIZE和WM_SIZING之间的区别。有什么方法可以捕获最后一个WM_SIZE消息,而不是用调整大小消息“垃圾邮件”我的程序? 最佳答案 当您开始拖动窗口时,系统会进入模式移动/调整大小循环;在拖动操作完成之前,它不会返回到您自己的消息循环。您仍然得到WM_SIZE,因

c++ - C++中size_t的性能

我翻译了代码here如下所示转换为C++#includeusingnamespacestd;intt=20;boolis_evenly_divisible(constinta,constintb){for(inti=2;i在MacOSX10.8.4上的编译器g++4.8.1上使用-O3标志,我得到时间0.568s用户时间。现在,如果我将函数is_evenly_divisible中第1行的计数器i更改为size_t,时间会突然跳到1.588s。即使我将所有变量都更改为size_t,这种情况仍然存在,时间增加到1.646s这是怎么回事?size_t不应该提高性能而不是降低性能,因为它是比i

c++ - 为什么我可以从 {} 初始化一个常规数组,而不是一个 std::array

这个有效:intarr[10]={};arr的所有元素都值初始化为零。为什么这行不通:std::arrayarr({});我从g++(版本4.8.2)收到以下警告:warning:missinginitializerformember‘std::array::_M_elems’ 最佳答案 有两个问题,一个是样式问题,另一个是警告。虽然可能并不明显,但聚合初始化发生在一个临时对象上,然后将其用作复制构造函数的参数。执行此初始化的更惯用的方式如下:std::arrayarr={};虽然这样还是留下了警告。警告由gccbugreport:

C++ size_t 或 ptrdiff_t

如果您有以下代码,其中p是一个指针:p=p+strlen(p)+size_t(1);由于strlen()和size_t都是size_t,我应该将代码转换为ptrdiff_t吗?p=p+(ptrdiff_t)(strlen(p)+size_t(1));如果是,为什么?谢谢,格雷格 最佳答案 std::ptrdiff_t已签署。std::size_t未签名。如果p可能有负长度,则将strlen(p)转换为ptrdiff_t是有意义的,这是不可能的。但是,如果p足够大(例如,在大多数32位平台上大于2,147,483,647字节),则该转

c++ - 类设计: arrays vs multiple variables

我有一些理论问题,但这是我在设计类时有时会遇到的问题,而且我在阅读其他代码时发现它的做法有所不同。以下哪项会更好,为什么:示例1:classColor{public:Color(float,float,float);~Color();friendbooloperator==(Color&lhs,Color&rhs);voidmultiply(Color);//...floatget_r();floatget_g();floatget_b();private:floatcolor_values[3];}示例2:classColor{public://asaboveprivate:floa

c++ -::operator new(size_t) 是否使用 malloc()?

::operatornew(size_t)是在内部调用malloc(),还是直接使用系统调用/操作系统特定的库调用?C++标准怎么说?在thisanswer它说:malloc()isguaranteedtoreturnanaddressalignedforanystandardtype.::operatornew(n)isonlyguaranteedtoreturnanaddressalignedforanystandardtypenolargerthann,andifTisn'tacharactertypethennewT[n]isonlyrequiredtoreturnanaddr