c++初学者:将索引语法转换为迭代器语法
Beginner C++: Transforming index-syntax into iterator-syntax
我正在尝试学习具有一点Java背景的c++,并且我正在尝试编写返回两个列表交集的代码。我相信我在概念上有正确的想法,但我有语法问题,因为没有什么是编译。
下面是我想出来的代码:#include <iostream>
using namespace std;
#include <list>
template <typename Object>
list<Object> intersection( const list<Object> & L1, const list<Object> & L2){
std::list<Object> result;
int pos1 = 0;
int pos2 = 0;
while (pos1 < L1.size() && pos2 < L2.size()) {
if (L1[pos1] > L1[pos2]) {
pos1++;
} else if (L2[pos2] > L1[pos1]) {
pos2++;
} else {
result.push_back(L2[pos2]);
pos1++;
pos2++;
}
}
return result;
}
我认为我需要的东西:一个迭代器(我确定我访问列表的方式是不正确的)
将pos1和pos2改为迭代器:
list<Object> intersection( const list<Object> & L1, const list<Object> & L2){
std::list<Object> result;
std::list<Object>::iterator pos1 = L1.begin(), pos2 = L2.begin();
while (pos1 != L1.end() && pos2 != L2.end()) {
if (*pos1 > *pos2) { //works only if pos1 != L1.end() and pos2 != L2.end()
pos1++;
...
pos1 = L1.begin()
将pos1
指向L1
的第一个元素。
++pos1
将迭代器向前移动到下一个元素
*pos1
从pos1
获取元素
pos1 != L1.end()
检查pos1
是否到达列表的末端。当pos1 == L1.end()
.
pos1
中获取元素。你需要一个const_iterator
而不是iterator
。
所有的c++容器类都有typedef
s来定义它们所包含的类型、迭代器类型等。
在您的例子中,list<Object>::value_type
的类型是Object
。所以你可以说:
list<Object>::value_type object = Object();
同样,list<Object>::iterator
是遍历容器的迭代器类型。您可以使用begin()
和end()
获得表示容器开始和结束的迭代器。
如果您的容器是const
,如您的问题,begin
和end不返回iterator
,他们返回const_iterator
。您不能将其分配给iterator
类型。它们的不同之处在于一个允许你修改值,而另一个不允许。
你可以使用const_iterator
来解决你的问题。但是,有许多其他方法可以解决这个问题。
-
auto
意味着您不必明确指定类型。它为你做正确的事情。 - 模板可以使用泛型参数,所以,同样,你不必明确。
- 标准库有各种算法,可能已经做了你想要的(例如
set_intersection
)。
相关文章:
- 转换包含向量 C++ 的语法和结构
- 这个typedef和转换运算符语法是什么意思
- n-ary布尔语法从中缀到前缀的Boost::Spirit转换?
- 英里到千克转换器练习的小语法错误
- 将强制转换运算符重载到 std::map 的正确语法是什么
- 此语法中的构造函数转换错误
- 如何将Mongo Shell命令转换为Mongocxx语法
- 我如何将此C语言语法转换为C
- 将 AT&T 语法转换为英特尔语法 (ASM)
- C 语法:所请求的从某些_type转换为非scalar_type
- 如何用C++兼容的语法转换C函数调用
- 为什么在使用初始化语法时不调用转换运算符,为什么 clang 错误消息看起来是错误的
- 如何将此C++代码转换为 C# 代码?我忘记了什么语法
- void * 转换为 int 语法的问题
- C++语法:使用typedef进行类型转换
- 如何在VC++中将TChar[]数组转换为std::string.语法帮助
- 是否有任何应用程序可以将PyQt(带有Python语法)项目转换为Qt(带有c++语法)项目
- ' auto x = type{…} '初始化语法和'显式'转换操作符- clang vs gcc
- 语法转换为Lex/Yacc
- c++初学者:将索引语法转换为迭代器语法