如果向量(声明为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)
,但这也表明他们不平等。
答案 0 :(得分:17)
我正在写这个答案,因为其他两个,包括被接受的答案,都是错的。 std::vector
的{{1}}类型不是size()
,也不是unsigned int
。
size_t
的尺寸类型为std::vector<T>
。
就是这样。在某些体系结构和某些编译器上,它可能与std::vector<T>::size_type
相同,在某些其他体系结构中可能不同。假设size_t
类型的变量可以保存与size_t
类型的值相同的值,可能会失败。
要检查您的矢量是否具有正确的尺寸,您可以执行以下操作:
std::vector<T>::size_type
答案 1 :(得分:5)
您在if语句的右侧缺少)
if((int)(vectorX.size()) != (intendedSize)) {
^^^
}
但请注意,将std :: vector :: size的返回值强制转换为int是不好的。你失去了一半大小的可能性(感谢克里斯)。
你应该写:
size_t intendedSize = 10;
// OR unsign int intendedSize = 10;
if(vectorX.size() != intendedSize) {
}
答案 2 :(得分:2)
使用size_t
类型保存集合大小:
vector<int> vectorX;
size_t intendedSize = 10;
// Some stuff here
if(vectorX.size() != intendedSize) {
...
}
实际上技术上你应该使用vector<int>::size_type
但实际上这始终是size_t
int
通常是带符号的32位整数。
size_t
通常是无符号的64位整数(在64位体系结构上)或无符号的32位整数(在32位体系结构上)。
(注意标准不强制执行这些约束.ABI指定了这个,例如x86和x86-64 ABI。)