我知道function GetDistance(img, lRimborsoKm, txtRimborso, hfImportoRimborso, hfLastOfTheDay) {
var latA = img.attributes['latA'].value;
var lngA = img.attributes['lngA'].value;
var latB = img.attributes['latB'].value;
var lngB = img.attributes['lngB'].value;
var latC = img.attributes['latC'].value;
var lngC = img.attributes['lngC'].value;
var isLastOfTheDay = hfLastOfTheDay.value;
if (latC == '' && lngC == '') // A -> B + B -> A
{
source = new google.maps.LatLng(latA, lngA);
destination = new google.maps.LatLng(latA, lngA);
var waypts = [];
waypts.push({
location: new google.maps.LatLng(latB, lngB),
stopover: true
})
GetDist(source, destination, waypts, function () {
distance = Number(this);
var fullDistance = Number(distance);
});
} else if (isLastOfTheDay == 'True') { // A -> B + B -> C
source = new google.maps.LatLng(latA, lngA);
destination = new google.maps.LatLng(latC, lngC);
var waypts = [];
waypts.push({
location: new google.maps.LatLng(latB, lngB),
stopover: true
})
GetDist(source, destination, waypts, function () {
distance = Number(this);
var fullDistance = Number(distance);
});
} else { // A -> B
source = new google.maps.LatLng(latA, lngA);
destination = new google.maps.LatLng(latB, lngB);
var waypts = [];
GetDist(source, destination, waypts, function () {
distance = Number(this);
var fullDistance = Number(distance);
});
}
}
function GetDist(source, destination, waypts, fn) {
directionsService.route({
origin: source,
destination: destination,
waypoints: waypts,
optimizeWaypoints: true,
avoidHighways: true,
avoidTolls: true,
travelMode: google.maps.TravelMode.DRIVING
}, function (response, status) {
if (status === google.maps.DirectionsStatus.OK) {
var route = response.routes[0];
var distance = 0;
for (var i = 0; i < route.legs.length; i++) {
var routeSegment = i + 1;
distance += Math.floor(route.legs[i].distance.value / 1000);
}
fn.call(distance);
} else {
fn.call(0);
console.log(status);
console.log('latA: ' + source.lat() + ', lngA: ' + source.lng() + ', latB: ' + destination.lat() + ',lngB: ' + destination.lng());
}
});
}
没有复合赋值运算符(std::forward_list<T>::iterator
)。但那为什么呢?
我问这个有三个原因:
operator+=
这样的迭代器? operator++()
执行相同的操作?std::advance()
的错误。答案 0 :(得分:9)
使用:
std::advance(it, n);
(在<iterator>
中声明。)
重点是复合赋值运算符仅在运算具有O(1)成本时提供。由于递增前向迭代器具有线性成本,因此最好将其显式化。
如果您想要一个重复增量结果的新值,请使用:
auto it2 = std::next(it1, n);
答案 1 :(得分:5)
但我不知道为什么?
前向迭代器一次只能前进一个单位。 +=
通常用于一次运行多个单元。
这个操作员不会推进&#34;前进&#34;像
operator++()
这样的迭代器?
但是你可以像iterator += 10
那样使用它,这会让你相信它会立即提升10个位置。相反,它必须是10个单独的++
次呼叫。
是不是还有帮助函数std :: advance()做同样的事情?
是的,但它明确指出它是多个++
调用,除非您使用的是随机迭代器。
我正在实施我自己的转发列表(用于学习),我想知道operator + =()
的错误
您的迭代器应符合前向迭代器的标准定义。
答案 2 :(得分:1)
但我不知道为什么?
有一些合同,不同的类别迭代器必须遵循。可以找到说明here您可以查看ForwardIterator类别的合同,std::forward_list<T>::iterator
所属的合同,以及RandomAccessIterator没有r += n
操作