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

c++ why dont print all elements when exponent

我想创建一个数组并将该数组中的每个元素加 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,但我希望它打印所有元素。请注意,2 ** arr1 是我将 2 乘以幂的那一行(使用求幂运算符,如果我没记错的话,我认为这是你的称呼方式)然后它应该将数组存储在 array2.

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

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

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

此声明

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 

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

#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.
          }
}