如何解决向量中使用size函数时出错
所以我第一次开始学习向量,并编写了一个简单的程序,如下所示:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> g1;
int n;
cout<<"enter values"<<endl;
do
{
cin>>n;
g1.push_back(n);
} while (n);
cout<<"Vector values are: "<<endl;
for(auto i=g1.begin(); i<g1.size();i++)
cout<<*i<<endl;
}
当我尝试执行它时,在g1.size()部分显示一个错误,提示“类型不匹配”。为什么会这样呢?我为涉及的迭代器使用了auto关键字,并假设不会有任何问题?
解决方法
那是使用auto
的不好的一面。如果您不知道auto
的结果是什么,那么您将不知道为什么它与您期望的完全不同!
std::vector::begin
提供了一个std::vector::iterator
,您无法将其与size_type
产生的std::vector::size
值进行比较。此类型通常为std::size_t
您必须与另一个迭代器进行比较,该迭代器表示向量的结尾,例如:
for(auto i = g1.begin(); i != g1.end(); i++)
,
至少有三种方法可以迭代向量的内容。
您可以使用索引:
for (int i = 0; i < vec.size(); ++i)
std::cout << vec[i] << '\n';
您可以使用迭代器:
for (auto it = vec.begin(); it != vec.end(); ++it)
std::cout << *it << '\n';
您可以使用基于范围的for循环:
for (auto val : vec)
std::cout << Val <<'\n';
后两个可以与任何容器一起使用。
, import * as chai from 'chai'
import chaiAsPromised from 'chai-as-promised'
chai.use(chaiAsPromissed)
返回第一个元素的 iterator ,而g1.begin()
返回元素的 number 。您无法将迭代器与大小进行比较,这就是为什么会出现错误。它与您使用g1.size()
无关,与您比较彼此不相关的2种不同事物有关。
您需要更改循环,以将auto
迭代器与向量的i
迭代器进行比较,例如:
end()
或者,只需使用range-based for
loop来代替,它内部使用迭代器:
for(auto i = g1.begin(); i != g1.end(); ++i)
cout << *i << endl;
否则,如果要使用for(auto i : g1)
cout << i << endl;
,则对向量的size()
使用索引,而不要使用迭代器,例如:
operator[]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。