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

如果您确定所有非空字符串都在开头,那么您可以使用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 回答
1

没有办法(至少在 C++ 中,据我所知)读出数组中有多少元素是确定的。你必须通过你自己的变量来做(当你“添加”元素时增加它,当“删除”时减少它)。您也可以使用 std::vector。vector.size() 返回向量的大小。

于 2012-09-30T07:36:42.520 回答
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 回答