如何通过指针输入整数数组并打印出数组和数组的大小(C++)

How in input an array of integers by pointers and print out the array and the size of the array(C++)

本文关键字:数组 C++ 打印 指针 何通过 输入 整数      更新时间:2023-10-16
#include<iostream> 
using namespace std;
int main() {
  int *p=new int [10];
}

创建数组后,我很困惑,想知道是否可以执行以下操作:

  1. 读取没有内置数组(如 vector(的整数数组。
  2. 打印出此数组。
  3. 有没有我们可以在 cpp 中使用的内置命令来获取数组的实际大小,这意味着我们不必使用 sizeof(*p(/size(p[0](。

您认为在我们仍然使用数组指针的情况下,完成此任务的最简单方法是什么。

谢谢你帮助我!

我认为你可以使用std::for_each。与c ++ lambda函数一起,它是一个非常全面的工具:

for_each(p, p+10, []->(int element){ cout << element; })

sry,我没有编译上面的代码,所以它可能包含错误。但我希望模式是明确的。

如果你的编译器不支持lambdas,你可以使用函子或函数指针(只需谷歌搜索它(。我真的很喜欢这种方法,我也不喜欢循环。

但是,当然,如上所述,内部for_each循环。

这不会创建数组,但它会为您提供指向单个整数的指针。

int *p=new int;

例如,将其更改为:

const unsigned size = 10;
int * p = new int[size]; /*dont forget to call delete[] on p when you are ready.*/

现在 p 指向 10 整数,你知道大小,因为你已经把大小设置为 10。

当然,您可以在没有循环的情况下打印p的值

/*Assuming you initialize the values.*/
cout << p[0];
cout << p[1];
/*etc*/
cout << p[9];

也就是说,我认为解决问题的最简单方法是使用vector<int>(但这并不能满足您的第一点(。您将始终获得具有vector<TYPE>::size()的矢量的适当大小,并且矢量的意图使迭代(这也是循环(项目以打印它们变得容易。

您必须逐项手动打印数组...访问每个值,例如:

cout << "index 5:" << p[5] << endl;

我认为循环是一种要走的路。只有当数组只有几个项目,并且固定长度(如 3 到 5 个项目左右(并且迫切需要优化代码以提高速度时,我才会避免循环,但控制台输出无论如何都会很慢。但编译器通常支持循环展开优化。

@nio,但是伙计,我想我仍然有麻烦这样做。 例如,有什么方法可以让我以这种简单的方式输入带有空格的"1 2 3 4",然后它读取数组? 还是我必须用回车键来做?(现在,我不在乎我们是否使用循环或不再使用循环:P( – 康康

此代码将读取由空格和换行符组合分隔的 4 个项目:

int *p=new int[10];  
int i;
for(i=0;i<4;i++)
{
    cin >> p[i];
}
for(i=0;i<4;i++)
{
    cout  << "index " << i << " :" << p[i] << endl;
}

1. 读取整数数组,而不使用循环或一些内置数组(如 vector(。
递归。使用循环可以完成的所有事情都可以递归完成。

2. 不使用循环打印出此数组。
递归也是。

3. 是否有任何内置命令可以在 cpp 中使用来获取数组的实际大小,这意味着我们不必使用 sizeof(*p(/size(p[0](。

不,当你在 c++ 中使用数组时,你需要自己记住数组的长度。 sizeof(*p)/size(p[0])也帮不了你