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

}

配列を作成した後、私は混乱していて、次のことが可能かどうか知りたいです:

  1. ベクトルなどの組み込み配列なしで整数の配列を読み取ります。
  2. この配列を出力します。
  3. 配列の実際のサイズを取得するために cpp で使用できる組み込みコマンドはありますか。つまり、sizeof(*p)/size(p[0]) を使用する必要はありません。

そして、配列のポインターを使用するという条件で、このタスクを実行する最も簡単な方法は何だと思いますか?

助けてくれてありがとう!

4

4 に答える 4

2

std::for_each を使用できると思います。C++ ラムダ関数と合わせて、非常に包括的なツールです。

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

申し訳ありませんが、上記のコードはコンパイルしていないため、エラーが含まれている可能性があります。しかし、パターンは明らかです。

コンパイラがラムダをサポートしていない場合は、ファンクターまたは関数ポインターを使用できます (Google で検索してください)。私はこのアプローチが本当に好きで、ループも好きではありません。

しかし、もちろん、前述のように、for_each は内部的にループします。

于 2013-07-16T10:37:46.363 に答える
1

次のように、すべての値にアクセスして、配列を 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 int を指し、size を 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. read an array of integers without using loops nor some builtin arrays such as vector.
Recursion. Everything that can be done using loops can be done recursively.

2. print out this array without using loop.
Recursion too.

3. Is there any built-in command that we can use in cpp to get the actual size of the array, which means we don't have to use sizeof(*p)/size(p[0]).

No, when you're using arrays in c++ you need to remember the length of an arrays by yourself. sizeof(*p)/size(p[0]) won't help you too

于 2013-07-16T10:40:04.710 に答える