我使用下面的代码,如果矢量的大小(声明为引发错误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
Error! mismatch between vectorX 10 and intendedSize 10
哪里的错误? 早些时候,我试过(unsigned int)(intendedSize)
但同样给他们的不平等。
这是因为丢失)
中的if语句右侧
if((int)(vectorX.size()) != (intendedSize)) {
^^^
}
但请注意,这是不好投的std ::矢量::大小的返回值来诠释。 你失去的是什么尺寸可能是(感谢Chris)的可能性的一半。
你应该写:
size_t intendedSize = 10;
// OR unsign int intendedSize = 10;
if(vectorX.size() != intendedSize) {
}
因为其他两个,包括接受一个,都是错误的,我写这个答案。 的类型的std::vector
的size()
不是unsigned int
,也不是size_t
。
类型的大小的std::vector<T>
IS 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;
}
使用size_t
类型持有集合大小:
vector<int> vectorX;
size_t intendedSize = 10;
// Some stuff here
if(vectorX.size() != intendedSize) {
...
}
其实在技术上你应该使用vector<int>::size_type
但在实践中,这始终是一个typedef size_t
一个int
通常是一个带符号的32位整数。
size_t
通常是一个无符号的64位整数(在64位体系结构)或无符号的32位整数(32位体系结构)。
(请注意,该标准没有实施这些约束。该ABI指定此,例如在x86和x86-64 ABI做。)