如何将矢量大小与整数进行比较?

时间:2013-01-30 07:54:48

标签: c++ vector

如果向量(声明为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),但这也表明他们不平等。

3 个答案:

答案 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

的typedef

int通常是带符号的32位整数。

size_t通常是无符号的64位整数(在64位体系结构上)或无符号的32位整数(在32位体系结构上)。

(注意标准不强制执行这些约束.ABI指定了这个,例如x86和x86-64 ABI。)