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

时间:2013-07-16 10:07:20

标签: c++ arrays pointers

#include<iostream> 
using namespace std;
int main() {
  int *p=new int [10];

}

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

  1. 读取没有内置数组(如vector)的整数数组。
  2. 打印出这个数组。
  3. 我们可以在cpp中使用任何内置命令来获取数组的实际大小,这意味着我们不必使用sizeof(* p)/ size(p [0])。
  4. 在我们仍然使用数组指针的情况下,您认为执行此任务的最简单方法是什么?

    感谢您帮助我!

4 个答案:

答案 0 :(得分:2)

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

for_each(p, p+10, []->(int element){ cout << element; })
sry,我没有编译上面的代码,所以它可能包含错误。但我希望这种模式很清楚。

如果您的编译器不支持lambdas,您可以使用仿函数或函数指针(只需google)。我真的很喜欢这种方法,我也不喜欢循环。

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

答案 1 :(得分:1)

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

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()获得适当大小的向量,并且向量的内容可以很容易地在项目上进行迭代(也是循环)以打印它们。

答案 2 :(得分:1)

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

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

我认为循环是一种方法。我会避免循环,只有当数组有少量项目,固定长度,如3至5项左右,并急需优化代码的速度,但不是控制台输出,无论如何将是慢。但编译器通常支持循环展开最优化。

  

@nio,但伙计,我想我仍然有这样做的麻烦。例如,有没有什么方法可以用这个简单的方式输入“1 2 3 4”空间然后它读取数组?或者我必须用enter进行? (现在,我不在乎我们是否再使用循环:P) - Cancan

此代码将读取由空格和换行符组合分隔的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;
}

答案 3 :(得分:0)

1。读取一个整数数组而不使用循环,也不读取一些内置数组,如vector。
递归。可以使用循环完成的所有操作都可以递归完成。

2。打印出这个数组而不使用循环。
递归也是。

3。是否有任何内置命令可以在cpp中使用以获取数组的实际大小,这意味着我们不必使用sizeof(* p)/ size(p [0])。 <登记/>
不,当你在c ++中使用数组时,你需要自己记住数组的长度。 sizeof(*p)/size(p[0])对你也无济于事