如何找到数组确定成员的大小。例如,我用这个声明了我的数组:
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
如果您确定所有非空字符串都在开头,那么您可以使用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, "");
没有办法(至少在 C++ 中,据我所知)读出数组中有多少元素是确定的。你必须通过你自己的变量来做(当你“添加”元素时增加它,当“删除”时减少它)。您也可以使用 std::vector。vector.size() 返回向量的大小。
您不能使用 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;