查找数组中某些元素的大小
Finding the size of certain elements in an array?
如何找到数组中确定成员的大小。例如,我用这个声明了我的数组:
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;
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀