草庐IT

c++ - 为什么 complex<double> * int 没有在 C++ 中定义?

C++程序#include#includeintmain(){std::complexz(0,2);intn=3;std::cout产生错误:‘z*n’中的‘operator*’不匹配。为什么?我正在使用g++4.4.1进行编译。也许编译器只是遵循C++标准,在这种情况下我的问题是:为什么标准不允许这样做? 最佳答案 这个有效:#include#includeintmain(){std::complexz(0,2);doublen=3.0;//Note,doublestd::cout因为复数由双数组成,所以它与双数相乘。查看声明:t

c++ - 添加两个 unsigned char 变量,结果为 int

有代码:#includeintmain(){unsignedchara=4,b=255;intg=(unsignedchar)a+(unsignedchar)b;std::cout结果:259为什么结果是259,而不是3?如果加了两个unsignedchar变量,应该会溢出,result应该是3,然后把unsignedchar3转成int3。 最佳答案 加法运算会先promote其操作数为int,然后再进行加法运算。这就是C的工作原理。如果要截断,则需要将其分配回更窄的类型,例如unsignedchar。

c++ - unique_ptr<int[]> 还是 vector<int>?

如果不需要动态增长,不知道编译时缓冲区的大小,应该什么时候unique_ptr用来代替vector如果有的话?使用vector是否有显着的性能损失?而不是unique_ptr? 最佳答案 使用std::vector没有性能损失与std::unique_ptr.但是,替代方案并不完全等同,因为vector可以增长而指针不能(这可能是优点也可能是缺点,vector是否错误地增长了?)还有其他区别,比如值将在std::vector中初始化。,但如果你new他们就不会了数组(除非您使用值初始化...)。归根结底,我个人会选择std::vec

c++ - 为什么 "long int"与 "int"大小相同?这个修改器到底有没有用?

嗯..我有点'虽然像long/short这样的修饰符扩展/减少了创建变量时分配的内存量,但是......#include#definetest_intint#definelong_intlongint#definelong_long_intlonglongintvoidmain(){printf("%i\n",sizeof(test_int));//output4printf("%i\n",sizeof(long_int));//output4.Why?wasn'tImodifiedit'ssize?printf("%i\n",sizeof(long_long_int));//outp

c++ - 在 C++ 中将两个具有相同长度的 int vector 转换为一个由 int 对组成的 vector

在C++中,如果我有两个intvector:A=[1,2,3,4];B=[1,2,3,4];我怎样才能将它们合并成一对vector:[(1,1),(2,2),(3,3),(4,4)]当然我可以用一个循环来做到这一点。但是我们可以使用合适的STL函数和迭代器来做到这一点吗? 最佳答案 你可以为此使用一个算法:std::vector>target;target.reserve(A.size());std::transform(A.begin(),A.end(),B.begin(),std::back_inserter(target),[

c++ - 为什么整数类型 int64_t 不能持有这个合法值?

这个问题在这里已经有了答案:Whydoesthemostnegativeintvaluecauseanerroraboutambiguousfunctionoverloads?(3个答案)关闭3年前。我正在尝试为一些特殊情况编写测试用例。对于int64_t类型的输入,以下行将无法编译:int64_ta=-9223372036854775808LL;错误/警告是:error:integerconstantissolargethatitisunsigned[-Werror]我以为这个数字超出了范围,所以我试了:std::cout::min()它输出完全相同的数字!!!所以常数在范围内。我该

c++ - 将迭代器转换为 int

inti;vectornames;strings="penny";names.push_back(s);i=find(names.begin(),names.end(),s);cout我正在尝试查找vector中元素的索引。iterators没问题,但我希望它是int。我该怎么做? 最佳答案 您可以使用std::distance为此。i=std::distance(names.begin(),std::find(names.begin(),names.end(),s));不过,您可能想要检查您的索引是否超出范围。if(i==name

c++ - powerOf(int x, int n) 的最佳方式?

因此给定x和幂n,求解X^n。有一种简单的方法是O(n)...我可以通过执行将其降低到O(n/2)numSquares=n/2;numOnes=n%2;return(numSquares*x*x+numOnes*x);现在有一个O(log(n))解决方案,有人知道怎么做吗?它可以递归完成。 最佳答案 嗯,你知道xa+b=xaxb所以...intpow(intx,unsignedinty){if(y==0)return1;if(y==1)returnx;inta=y/2;intxa=pow(x,a);if(a+a==y)//yeven

c++ - gcc 的 -Wconversion 是否与使用比 int 短的整数类型的复合赋值(+= 等)不兼容?

gcc有一个有用的标志-Wconversion当存在从较宽类型到较窄类型的隐式转换时会产生警告,可能会丢失信息。不幸的是,它有以下......无用的......行为。考虑这个程序:intmain(void){shortx=1;x=x+x;return0;}用-Wconversion编译产生nonsense.c:Infunction'main':nonsense.c:3:8:warning:conversionto'shortint'from'int'mayalteritsvalue[-Wconversion]这很公平;在大多数平台上,如果发生x==0x8000,这将执行您可能意想不到的

c++ - std::vector::resize(size_type) 是否应该(在 C++11 中)适用于默认的可构造 value_type int[4]?

在C++11中,std::vector::resize()有两个版本:voidresize(size_typecount);voidresize(size_typecount,constvalue_type&value);我理解(正如对thisquestion的一个答案的评论之一所建议的那样)第一个要求value_type是默认可构造的,而第二个要求它是可复制构造的。但是,(gcc4.7.0)usingnamespacestd;typedefintblock[4];vectorA;static_assert(is_default_constructible::value,";-(");