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

时间:2012-09-30 07:31:00

标签: c++ arrays string sizeof

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

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

在这段代码中,有197个未使用的元素(或者我理解这一点)。我希望通过代码(例如 sizeof())找到此数组的某些元素(3个元素)。我怎么能这样做?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分: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, "");

答案 3 :(得分:0)

你不能使用sizeof()来找出数组中“填充”了多少元素,你将std :: string存储在数组中(我假设至少)并且所有元素都具有相同的大小(因为std) :: string在初始化后不会改变大小)。没有对象在C ++中改变大小,实际上至少不是根据sizeof(); sizeof()将始终为类型返回相同的数字,因为它返回静态类型的大小。

如果您认为当字符串不等于“”时数组中的某个位置被“填充”,那么您可以使用以下代码来计算字符串数:

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

我建议使用std :: vector&lt;&gt;相反,(这几乎总是一个更好的主意):

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;