如何与整数比较矢量大小? [关闭](How compare vector size with a

2019-08-08 19:47发布

我使用下面的代码,如果矢量的大小(声明为引发错误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)但同样给他们的不平等。

Answer 1:

这是因为丢失)中的if语句右侧

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

但请注意,这是不好投的std ::矢量::大小的返回值来诠释。 你失去的是什么尺寸可能是(感谢Chris)的可能性的一半。

你应该写:

size_t intendedSize = 10; 
// OR unsign int intendedSize  = 10; 
if(vectorX.size() != intendedSize) {
}


Answer 2:

因为其他两个,包括接受一个,都是错误的,我写这个答案。 的类型的std::vectorsize()不是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;
}


Answer 3:

使用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做。)



文章来源: How compare vector size with an integer? [closed]
标签: c++ vector