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

How compare vector size with an integer?

本文关键字:整数 比较 向量      更新时间:2023-10-16

如果向量(声明为 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 这样做。