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

}

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

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

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

谢谢你的协助!

4

4 回答 4

2

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

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

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

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

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

于 2013-07-16T10:37:46.363 回答
1

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

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

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

@nio,但是伙计,我想我仍然很难做到这一点。例如,有什么方法可以用这种简单的方式输入“1 2 3 4”和空格,然后读取数组?或者我必须用输入来做?(现在,我不在乎我们是否使用循环: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;
}
于 2013-07-16T10:29:24.843 回答
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()并且向量的实例可以轻松迭代(这也是循环)项目以打印它们。

于 2013-07-16T10:21:44.003 回答
0

1. 读取整数数组,不使用循环,也不使用一些内置数组,例如向量。
递归。可以使用循环完成的所有事情都可以递归完成。

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

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

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

于 2013-07-16T10:40:04.710 回答