查找数组中某些元素的大小

Finding the size of certain elements in an array?

本文关键字:元素 数组 查找      更新时间:2023-10-16

如何找到数组中确定成员的大小。例如,我用这个声明了我的数组:

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

在此代码中,有 197 个未使用的元素(或者我理解为这样)。我想通过诸如 sizeof() 之类的代码找到这个数组的某些元素(3 个元素)。我该怎么做?

你不能。但是,您可以先将数组归零,然后计算非零元素的数量,但这需要数组包含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
没有

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

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

你不能使用 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;