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, 4, 8, 16, 32, 64, 128]
但出于某种原因它只打印数组的第一个元素,它打印 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.
}
}
我想创建一个数组并将该数组中的每个元素加 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++ 不是 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.
}
}