dart 中是否有类似 C++ 的迭代器
Are there c++ like iterators in dart
在 c++ 中,我们有迭代器作为对列表中某些元素的引用。分配给迭代器可以更改列表中的元素。
例如:
std::map<std::pair<int,int> ,Ship> playgroundMap;
playgroundMap.insert(std::make_pair(std::make_pair(2,2),Ship(100,Cannon(50))));
playgroundMap.insert(std::make_pair(std::make_pair(3,3),Ship(200,Cannon(60))));
std::cout<<"Iterators : "<<std::endl;
auto shipPtr = playgroundMap.find(std::make_pair(2,2));
std::cout<<" address of ship Before : "<<&shipPtr->second<<std::endl;
shipPtr->second.cannon.firepower = 1000;
auto tmp = Ship(200,Cannon(90));
shipPtr->second = tmp;
std::cout<<" address of ship After newly Assigned : "<<&shipPtr->second<<std::endl;
std::cout<<"finalList : "<<std::endl;
for(auto a : playgroundMap)
{
std::cout<<a.second.durability<<std::endl<<a.second.cannon.firepower<<std::endl;
}
更不用说c++中的引用就足以实现这一点。 c++ 中的引用不会像在 dart 中那样在赋值时反弹。
例如在 C++ 中:
std::map<std::pair<int,int> ,Ship> playgroundMap;
playgroundMap.insert(std::make_pair(std::make_pair(2,2),Ship(100,Cannon(50))));
playgroundMap.insert(std::make_pair(std::make_pair(3,3),Ship(200,Cannon(60))));
std::cout<<"Reference : "<<std::endl;
auto &shipRef = playgroundMap[std::make_pair(2,2)];
std::cout<<" address of ship Before : "<<&shipRef<<std::endl;
shipRef.cannon.firepower = 1000;
auto tmp = Ship(200,Cannon(90));
auto &tmpRef = tmp;
std::cout<<" address of tmpref (newly created ship) : "<<&tmpRef<<std::endl;
shipRef = tmpRef;
std::cout<<" address of ship After newly Assigned : "<<&shipRef<<std::endl;
std::cout<<" address of finalList : "<<std::endl;
for(auto a : playgroundMap)
{
std::cout<<a.second.durability<<std::endl<<a.second.cannon.firepower<<std::endl;
}
这会修改 c++ 中的列表元素,而在 dart 中,引用会重新绑定而列表中的元素不会 change.That 完全是另一回事,我知道这两个概念在两种语言中都是不同的。
我的问题是,在 dart 中是否有某种类似于 c++ 迭代器的方式允许我执行此类操作。我知道我可以只存储索引,但我不想那样做。
平台库中没有类似的东西。
通常,Dart 迭代器允许访问集合的值,而不是改变集合本身。
此限制的原因之一可能是 Dart 没有引用变量作为开头,但没有什么内在地阻止 Dart 拥有允许您更改当前元素值的迭代器。至少对于一个列表,它可以工作。哈希集可能不起作用,因为更改的值不会在迭代的同一位置。
总而言之,平台库不支持或不想支持它。在大多数地方,Dart 平台库比 C++ 更像函数式编程。
在 c++ 中,我们有迭代器作为对列表中某些元素的引用。分配给迭代器可以更改列表中的元素。 例如:
std::map<std::pair<int,int> ,Ship> playgroundMap;
playgroundMap.insert(std::make_pair(std::make_pair(2,2),Ship(100,Cannon(50))));
playgroundMap.insert(std::make_pair(std::make_pair(3,3),Ship(200,Cannon(60))));
std::cout<<"Iterators : "<<std::endl;
auto shipPtr = playgroundMap.find(std::make_pair(2,2));
std::cout<<" address of ship Before : "<<&shipPtr->second<<std::endl;
shipPtr->second.cannon.firepower = 1000;
auto tmp = Ship(200,Cannon(90));
shipPtr->second = tmp;
std::cout<<" address of ship After newly Assigned : "<<&shipPtr->second<<std::endl;
std::cout<<"finalList : "<<std::endl;
for(auto a : playgroundMap)
{
std::cout<<a.second.durability<<std::endl<<a.second.cannon.firepower<<std::endl;
}
更不用说c++中的引用就足以实现这一点。 c++ 中的引用不会像在 dart 中那样在赋值时反弹。 例如在 C++ 中:
std::map<std::pair<int,int> ,Ship> playgroundMap;
playgroundMap.insert(std::make_pair(std::make_pair(2,2),Ship(100,Cannon(50))));
playgroundMap.insert(std::make_pair(std::make_pair(3,3),Ship(200,Cannon(60))));
std::cout<<"Reference : "<<std::endl;
auto &shipRef = playgroundMap[std::make_pair(2,2)];
std::cout<<" address of ship Before : "<<&shipRef<<std::endl;
shipRef.cannon.firepower = 1000;
auto tmp = Ship(200,Cannon(90));
auto &tmpRef = tmp;
std::cout<<" address of tmpref (newly created ship) : "<<&tmpRef<<std::endl;
shipRef = tmpRef;
std::cout<<" address of ship After newly Assigned : "<<&shipRef<<std::endl;
std::cout<<" address of finalList : "<<std::endl;
for(auto a : playgroundMap)
{
std::cout<<a.second.durability<<std::endl<<a.second.cannon.firepower<<std::endl;
}
这会修改 c++ 中的列表元素,而在 dart 中,引用会重新绑定而列表中的元素不会 change.That 完全是另一回事,我知道这两个概念在两种语言中都是不同的。
我的问题是,在 dart 中是否有某种类似于 c++ 迭代器的方式允许我执行此类操作。我知道我可以只存储索引,但我不想那样做。
平台库中没有类似的东西。 通常,Dart 迭代器允许访问集合的值,而不是改变集合本身。
此限制的原因之一可能是 Dart 没有引用变量作为开头,但没有什么内在地阻止 Dart 拥有允许您更改当前元素值的迭代器。至少对于一个列表,它可以工作。哈希集可能不起作用,因为更改的值不会在迭代的同一位置。
总而言之,平台库不支持或不想支持它。在大多数地方,Dart 平台库比 C++ 更像函数式编程。