检查 MFC C++中的数组
Check Array in MFC C++
我拥有的这段代码无法正常工作。
for (int i = 0; i <= 140; i++)
{
if (OneLine_Array.GetAt(i) == "Pass" || "Fail" || "Warn" || "Active")
{
OneLine_State.Add(OneLine_Array.GetAt(i));
}
}
如果我有它,它会起作用
for (int i = 0; i <= 140; i++)
{
if ((OneLine_Array.GetAt(i) == "Pass") || (OneLine_Array.GetAt(i) == "Fail") || (OneLine_Array.GetAt(i) == "Warn") || (OneLine_Array.GetAt(i) == "Active"))
{
OneLine_State.Add(OneLine_Array.GetAt(i));
}
}
我想知道是否有一种更短的方法可以做到这一点,而不是一遍又一遍地复制同一行代码?
谢谢。
您可以在到达条件之前存储GetAt
的结果,然后无需多次评估它:
auto x = OneLine_Array.GetAt(i);
if (x == "Pass" || x == "Fail" || x == "Warn" || x == "Active")
对于足够短的变量名(但请称其为比x
更好的名称),这将比您的第二个示例短。
你的原始条件不起作用的原因是"Fail"
、"Warn"
和"Active"
中的每一个都是true
的,所以逻辑OR也将true
。它们是true
因为它们是数组类型,可以转换为指向其第一个元素(char*
)的指针。非空指针将转换为 true
。
你不能这样做(OneLine_Array.GetAt(i) == "Pass" ||"失败" ||"警告" ||"活动") ==>这在C++中是不可能的
最好将 OneLine_Array.GetAt(i) 的字符串保存在变量中并制作"=="
既然你提到了 MFC C++。为了获得更好的性能,我建议使用 CMap (http://msdn.microsoft.com/en-us/library/s897094z.aspx) 来存储字符串。它确实加快了比较速度。
虽然
我更喜欢@sftrabbit回答的内容,但您可以为此编写一个小助手。
template<typename A, typename B>
bool equals_one_of(const A& a, const B& b)
{
return a == b;
}
template<typename A, typename B, typename... Args>
bool equals_one_of(const A& a, const B& b, const Args&... args)
{
return equals_one_of(a, b) || equals_one_of(a, args...);
}
int f()
{
if (equals_one_of(OneLine_Array.GetAt(i), "Pass", "Fail", "Warn", "Active"))
{
// ....
}
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '