11

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),但这也表明它们是不平等的。

4

3 回答 3

26

我写这个答案是因为其他两个,包括接受的一个,都是错误的。std::vector's的类型size()不是unsigned int,也不是size_t

an 大小的类型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;
}
于 2015-02-14T09:52:31.707 回答
9

)在 if 语句的右侧缺少

if((int)(vectorX.size()) != (intendedSize)) {
                                          ^^^
}

但请注意,将 std::vector::size 的返回值转换为 int 是不好的。您失去了大小可能的一半(感谢克里斯)。

你应该写:

size_t intendedSize = 10; 
// OR unsign int intendedSize  = 10; 
if(vectorX.size() != intendedSize) {
}
于 2013-01-30T07:56:41.617 回答
2

使用size_t类型来保存集合大小:

vector<int> vectorX;
size_t intendedSize = 10;
// Some stuff here
if(vectorX.size() != intendedSize) {
     ... 
}

实际上从技术上讲,您应该使用vector<int>::size_type,但实际上这始终是 typedefsize_t

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

size_t通常是无符号 64 位整数(在 64 位架构上)或无符号 32 位整数(在 32 位架构上)。

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

于 2013-01-30T08:07:00.833 回答