使用指针(C )在数组中首次出现元素
First occurrence of element in an array using pointers (C++)
int findFirst(const string a[], int n, string target)
{
for (int i = 0; i < n; i++)
if (a[i] == target)
return i;
return -1;
}
如何在不使用方括号并使用以下功能标头的情况下编写上述程序?
int findFirst(const string* a, int n, string target)
您可以简单地替换功能标头;const string a[]
已经是一个指针参数,含义与const string* a
完全相同。
然后,您可以解除a + i
for (int i = 0; i < n; i++)
if (*(a + i) == target)
或增量a
以及i
for (int i = 0; i < n; i++, a++)
if (*a == target)
,或者您只能使用指针
for (const string* p = a; p < a + n; p++)
if (*p == target)
首先,如果您编写具有指针作为输入参数的函数,最好在Nullptr上检查此指针(或0):
int findFirst(const string * a, int n, string target)
{
if (a)
{
// do search
}
return -1;
}
第二,对于搜索项目位置,您可以使用标准库中的算法:
#include <algorithm>
int findFirst(const std::string* a, int n, std::string target)
{
if (a)
{
int res = std::distance(a, std::find(a, a + n, target));
if (res < n)
{
return res;
}
}
return -1;
}
第三,最好通过cont引用传递目标,以排除不必要的复制构造函数。因此,我们可以拥有以下最终解决方案:
#include <algorithm>
int findFirst(const std::string* a, int n, const std::string& target)
{
if (a)
{
int res = std::distance(a, std::find(a, a + n, target));
if (res < n)
{
return res;
}
}
return -1;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀