2

配列の決定されたメンバーのサイズを見つけるにはどうすればよいですか。たとえば、次のように配列を宣言しました。

string myStrArray[200] = {
    "My first string",
    "My second string",
    "My last string"
}

このコードには、197 個の未使用の要素があります (または、そのように理解しています)。sizeof()などのコードで、この配列の特定の要素 (3 つの要素) を見つけたい。どうやってやるの?

4

4 に答える 4

4

それはいけません。ただし、最初に配列をゼロにしてからゼロ以外の要素の数を数えることはできますが、これには配列string*string.

代わりにベクトルを使用できます。たとえば、次のようになります。

std::vector<std::string> v;
v.reserve(200); // Allocate space for 200
v.push_back("My first string");
v.push_back("My second string");
v.push_back("My last string");
v.size(); // Returns 3
于 2012-09-30T07:35:34.727 に答える
1

配列内の要素がいくつ決定されているかを読み取る方法はありません(少なくともC++では、私が知っていることです)。独自の変数でそれを行う必要があります(要素を「追加」するときに増分し、「削除」するときに減分します)。std::vector も使用できます。vector.size() は、ベクトルのサイズを返します。

于 2012-09-30T07:36:42.520 に答える
1

空でない文字列がすべて先頭にあることが確実にわかっている場合は、次を使用できますstd::find

int n = std::find(myStrArray, myStrArray + 200, "") - myStrArray;

実際にstd::lower_boundは、バイナリ検索である を使用できるため、 よりも効率的ですstd::find。しかし、派手な比較関数が必要です。lhs が空ではなく、rhs が空の場合は true、それ以外の場合は false を返します。

空でない要素がまばらに分布している場合は、次を使用する必要がありますstd::count

int n = 200 - std::count(myStrArray, myStrArray + 200, "");
于 2012-09-30T07:43:18.317 に答える
0

sizeof() を使用して、配列に「埋められた」要素の数を調べることはできません。配列に std::string を格納していて (少なくともだと思います)、すべての要素が同じサイズになります (std::string の初期化後にサイズを変更しないでください)。C++ では、少なくとも sizeof() に従って実際にサイズを変更するオブジェクトはありません。sizeof() は、静的型のサイズを返すため、型に対して常に同じ数値を返します。

文字列が "" に等しくないときに配列内の位置が "埋められている" と見なす場合は、次のコードを使用して文字列の数をカウントできます。

for (int i = 0; i < 200; ++i)
    if (!myStrArray[i].empty()) ++count;

ただし、代わりに std::vector<> を使用することをお勧めします (ほとんどの場合、より良いアイデアです)。

std::vector<std::string> my_strings = { "a", "b" }; // requires C++11 in C++03 use push_back()
std::cout << "Number of strings: " << my_strings.size() << std::endl;
于 2012-09-30T07:43:34.673 に答える