私はパラメータとして配列を渡すときに、これらのうちどれが最適かと思いましたか?パラメータとしての配列
void function(int arr[]) {...};
または
void function(int* arr) {...};
あなたは私にあなたの理由を教えてもらえますか?どの本を参照するのか?ありがとう!
私はパラメータとして配列を渡すときに、これらのうちどれが最適かと思いましたか?パラメータとしての配列
void function(int arr[]) {...};
または
void function(int* arr) {...};
あなたは私にあなたの理由を教えてもらえますか?どの本を参照するのか?ありがとう!
を、私はどちらを使用します。 をにする必要がある場合は、どちらも同じです。
しかし、あなたがC++を使用するので、より良いアプローチは、このようなタスク
void function(std::vector<int> &arr) {...}
か、あなたは配列/ベクトルに
void function(const std::vector<int> &arr) {...}
これらは意味的に同一です。
#1は、あなたが配列を渡していることを明示しているので、(私の意見では)#1はやや良いです。
彼らは_構文的に異なっています。彼らはまったく同等です。 –
そして私は#2を好むが、あなたが配列を渡していることを明示しているからではないことを告白しなければならない。私はそれがあなたが**アドレス** = Pを渡していることを明示的にするので、それを好む – WhozCraig
パラメータとして配列を渡すための最良の方法は、実際にある:(渡した文字列のような)いくつかの例については
void function(type_t* array, int amountOfElts, int arrayAllocatedElts);
あなたは、多くの場合、これらの2つのパラメータを省略することができます。しかし、それらはいずれかの方法で役に立つかもしれません。たとえば、文字列に対して何らかの操作を行う場合や、strlen呼び出しまたは2つを保存する場合があります。
関数の引数に[]オプションを使用するのは私の意見では紛らわしく、避けるべきです。しかし、私はそれが大会だとは思わない。
(動的に割り当てられたものを含む)任意の配列を渡すだけの場合、それらは同等です。
あなたの関数は、実際の固定サイズの配列が必要な場合は、あなたがこれを行うことができます:この質問はc++タグ付けされているので
template <size_t N>
void function(char (&str)[N]) { ... }
を変更しない場合は、尋ねるためstd::vector
を使用することです
void function(int arr[]) {...};
と
で選択しますvoid function(int* arr) {...};
後者では、ポインタ自体をconst
と宣言できますが、前者では項目をconst
と宣言することしかできません。しかし、読者には[]
は、おそらく単一のオブジェクトへのポインタではなく、配列を示します。個人的には、const
によって提供される制約は、[]
によって提供されるarray'nessの表示よりも実質的に有用だと思います。
レベルコードが高い場合は、std::vector
またはstd::array
のどちらか適切な方を使用してください。、
template <class Iter>
void function(Iter first, Iter last)
{
// for example, to get size:
std::size_t size = std::distance(first, last);
// for example, to iterate:
for (Iter it = first; it != last; ++it)
{
// *it to get the value, like:
std::cout << *it << std::endl;
}
}
その方法は、あなたが配列のためだけでなく、機能を使用することができます。
は、あなたが提供したい抽象化の層によっては、オラフのアプローチか何かのSTL偉大なレベルに使用しています間を選んだはずですベクトル、リスト、キュー、スタックなど、さまざまなSTLタイプに対応します。
int tab[4] = {1,2,3,4};
function(tab, tab+4);
std::vector<int> vec;
// fill vector with something
function(vec.begin(), vec.end());
機能するように配列を渡すと、それは配列の最初の要素へのポインタとして減衰します。だからどちらも同じです。 –
これらのうちどれですか? 'void function(std :: string const&str){...};'が最適です。 – Johnsyweb
推奨読書:http://stackoverflow.com/a/4810672/78845 – Johnsyweb