如何将向量大小与整数进行比较
How compare vector size with an integer?
如果向量(声明为 vector<int> vectorX
)的大小与预期不同,我将使用以下代码抛出错误。
vector<int> vectorX;
int intendedSize = 10;
// Some stuff here
if((int)(vectorX.size()) != (intendedSize)) {
cout << "n Error! mismatch between vectorX "<<vectorX.size()<<" and intendedSize "<<intendedSize;
exit(1);
}
cout
语句显示两者的大小相同。比较并没有显示它们是相等的。
输出Error! mismatch between vectorX 10 and intendedSize 10
错误在哪里?早些时候我尝试过(unsigned int)(intendedSize)
但这也表明他们不平等。
我写这个答案是因为其他两个,包括公认的一个,都是错误的。std::vector
size()
的类型不unsigned int
,也不size_t
。
std::vector<T>
大小的类型是 std::vector<T>::size_type
.
就是这样。在某些体系结构和某些编译器上,它可能与 size_t
相同,在其他一些架构中可能并非如此。假设 size_t
类型的变量可以保存与类型 std::vector<T>::size_type
变量相同的值可能会失败。
要检查矢量的大小是否正确,您可以执行以下操作:
if(vec.size() != static_cast<std::vector<int>::size_type>(expected_size)) {
std::cerr << "Error!" << std::endl;
}
if 语句右侧缺少)
if((int)(vectorX.size()) != (intendedSize)) {
^^^
}
但请注意,将 std::vector::size 的返回值转换为 int 是不好的。你失去了一半大小的可能性(感谢克里斯)。
你应该写:
size_t intendedSize = 10;
// OR unsign int intendedSize = 10;
if(vectorX.size() != intendedSize) {
}
使用 size_t
类型来保存集合大小:
vector<int> vectorX;
size_t intendedSize = 10;
// Some stuff here
if(vectorX.size() != intendedSize) {
...
}
实际上,从技术上讲,您应该使用vector<int>::size_type
但实际上这始终是size_t
的typedef
int
通常是有符号的 32 位整数。
size_t
通常是无符号的 64 位整数(在 64 位体系结构上)或无符号的 32 位整数(在 32 位体系结构上)。
(请注意,该标准不强制实施这些约束。 ABI 指定了这一点,例如 x86 和 x86-64 ABI 这样做。
- C++模板函数,用于比较任何无符号整数和有符号整数
- 正在LLVM中检测整数比较条件
- 为什么:不同符号的整数比较只是偶尔发生?
- C++ 如何比较n个排序的整数向量以找到互元素?
- 比较C++中两个整数的最有效和最干净的方法是什么?
- 禁止指针和整数之间的比较C++
- ISO C++禁止指针和整数 [-fpermissive] [c++] 之间的比较
- Qsort() 比较结构体整数的总和
- 比较两个整数在C++中与未知 int 类型的相等性
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- 比较整数提升后的结果
- 对压缩整数进行加法、减法和比较
- 如何正确比较整数和浮点值
- 错误:ISO C++禁止在指针和整数 [-fallowive] 之间进行比较
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- "正确"无符号整数比较
- C++,指向整数比较错误的指针
- C++指针与整数比较编译错误
- 为什么此指针/整数比较会生成分段错误
- 这是不可避免的有符号和无符号整数比较吗?