C 为什么不打印所有元素时
c++ why dont print all elements when exponent
我想创建一个数组,并将2个数组升起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.
}
}
相关文章:
- 为什么不;名字在地图上是按顺序排列的吗
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 为什么不递增?(构造函数)
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 为什么不允许使用可变长度数组作为向量元素?
- C++:为什么不调用移动构造函数?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- C++ queue.front();为什么不从第一个元素开始呢?
- 为什么在功能内擦除元素后不列出更新?
- 为什么具有两个元素的发起器语法将一个元素而不是两个元素放入字符串向量中?
- 为什么不支持容器适配器中元素的初始化和迭代
- C 为什么不打印所有元素时
- 为什么不允许在其元素中使用结构变量本身
- 为什么双空大括号 { { } } 创建一个<double>包含一个元素而不是零元素的 std::initializer_list?
- 为什么不能在sprintf中包含最后一个数组元素?
- 为什么不能将矢量中元素的地址推回<bool>矢量<bool*>?
- 为什么 std::queue 在弹出元素后不缩小内存?