vector<int>v的v.at(100)函数与v[100] 有何不同
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector<int>v的v.at(100)函数与v[100] 有何不同相关的知识,希望对你有一定的参考价值。
int a[4]=1,3,3,2;
vector<int>v(a,a+4);
try
v.at(100)=10; //改成v[100]=10;不会抛掷错误
cout << v.size()<<endl;
catch( out_of_range e)
cout << e.what() << endl;
如何将std :: vector的大小作为int?
我试过了:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size;
}
但得到了错误:
cannot convert 'std::vector<int>::size' from type 'std::vector<int>::size_type (std::vector<int>::)() const noexcept' {aka 'long unsigned int (std::vector<int>::)() const noexcept'} to type 'int'
将表达式转换为int
,如下所示:
#include <vector>
int main () {
std::vector<int> v;
int size = (int)v.size;
}
也会产生错误:
error: invalid use of member function 'std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]' (did you forget the '()' ?)
最后我试过:
#include <vector>
int main () {
std::vector<int> v;
int size = v.size();
}
这给了我:
warning: implicit conversion loses integer precision
我怎样才能解决这个问题?
答案
在前两种情况下,你只是忘了实际调用成员函数(!,它不是一个值)std::vector<int>::size
像这样:
#include <vector>
int main () {
std::vector<int> v;
auto size = v.size();
}
你的第三个电话
int size = v.size();
触发警告,因为并非该函数的每个返回值(通常是64位无符号整数)都可以表示为32位有符号整数。
int size = static_cast<int>(v.size());
总是会干净地编译,并明确指出你从std::vector::size_type
到int
的转换是有意的。
请注意,如果vector
的大小大于int
可以表示的最大数字,则size
将包含实现定义(事实上的垃圾)值。
以上是关于vector<int>v的v.at(100)函数与v[100] 有何不同的主要内容,如果未能解决你的问题,请参考以下文章