c ++为啥在指数时不打印所有元素

Posted

技术标签:

【中文标题】c ++为啥在指数时不打印所有元素【英文标题】:c++ why dont print all elements when exponentc ++为什么在指数时不打印所有元素 【发布时间】:2017-12-27 10:51:13 【问题描述】:

我想创建一个数组并将该数组中的每个元素提升 2 并将其存储为新数组 arr2。这是我的代码

#include <iostream>

using namespace std;

int main()
  int arr1[7] = 1, 2, 3, 4, 5, 6, 7;

  auto arr2 = 2 ** arr1;

  cout << arr2 << endl;

但是,它只打印第一个元素,而不打印整个数组。为什么?所以,基本上,我在这里所做的是我用元素 1,2,3,4,5,6,7 创建了 arr1 然后我希望 arr2 是

[2、4、8、16、32、64、128]

但由于某种原因,它只打印数组的第一个元素,它打印 2,但我希望它打印所有元素。请注意,2 ** arr1 是我将 2 提升到幂的行(使用幂运算符,如果我没记错的话,我认为这是您的称呼),然后它应该将数组存储在 array2 中。

出了什么问题,为什么它只打印第一个元素而不是所有元素?

【问题讨论】:

C++ 中没有指数运算符。为什么要猜测语法? 你需要一个或多个these。 @StoryTeller。谢谢先生的解释。我一定会学的。 【参考方案1】:

**不是指数运算符。 C++ 不是 Fortran。

您将arr 的第一个元素乘以2:您的语句等效于int arr2 = 2 * arr1[0];。您输入的是完全合法的 C++(包括乘法和指针解引用),而使用 auto 会增加混淆。

【讨论】:

谢谢,看来你是对的,我一直想知道为什么**对两个常量不起作用 这应该加入--&gt;“运营商”拥有的专属俱乐部。 @StoryTeller :也是“转换为布尔”运算符:!!【参考方案2】:

此声明

auto arr2 = 2 ** arr1;

等价于

auto arr2 = 2 * *arr1;

表达式中的数组指示符被转换(极少数例外)为指向它们的第一个元素的指针。

所以上面的语句可以改写成这样

auto arr2 = 2 * *( &arr1[0] );

由于数组arr1的第一个元素等于1,那么你有

auto arr2 = 2 * 1;

表达式2 * 1 的类型为int

所以结果语句可以像这样重写

int arr2 = 2;

C++ 中没有 ** 这样的运算符。相反,您必须使用标准函数pow

您可以通过手动编写适当的循环或使用例如标准算法std::transform 来完成任务。

这是一个演示程序

#include <iostream>
#include <cmath>
#include <algorithm>
#include <iterator>

int main()

    int arr1[] =  1, 2, 3, 4, 5, 6, 7 ;
    int arr2[sizeof( arr1 ) / sizeof( *arr1 )];

    std::transform(std::begin(arr1), std::end(arr1),
        std::begin(arr2),
        [](int x)  return pow( 2, x ); );

    for (int x : arr1) std::cout << x << ' ';
    std::cout << std::endl;
    for (int x : arr2) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;

它的输出是

1 2 3 4 5 6 7 
2 4 8 16 32 64 128 

【讨论】:

【参考方案3】:

做你想做的最简单的方法就是这样。

#include<iostream>
#include<math.h>
using namespace std;
int main()
      int arr1[7] = 1,2,3,4,5,6,7, arr2[7];
      for(int i = 0; i<7; i++)
          arr2[i] = pow(2, arr1[i]);    //arr2 will be created.
          cout<<arr2[i]<<" ";           //Show arr2.
          

【讨论】:

是的,谢谢,其他的答案已经解释的很好了,但是你的答案也是有效的,所以谢谢。

以上是关于c ++为啥在指数时不打印所有元素的主要内容,如果未能解决你的问题,请参考以下文章

C-为啥Struct数组的冒泡排序会跳过Array中的第一个元素?

为啥打印 unsigned char 有时有效,有时无效?在 C 中

为啥打印机在电脑上显示未连接?

为啥 WPF 绑定在绑定到元素本身的标签时不起作用

为啥这个的第二个版本在指数时间内运行?

为啥我的设计元素在所有浏览器中看起来都不同?更新[关闭]