Ich habe diesen CodeWas sagt der C++ Standard über std :: vector <int> v1, v2; std :: Abstand (v1.begin(), v2.begin())?
#include <vector>
#include <iostream>
int main(int argc, char* argv[])
{
std::vector<int> v1,v2;
std::cout << std::distance(v1.begin(),v2.begin());
return 0;
}
und es hat einen Fehler, weil es nicht sinnvoll ist, die Iteratoren von zwei verschiedenen Vektoren zu vergleichen.
hatte ich einen Blick auf N3376 bei 24.4.4 Iterator Operationen auf Seite 815:
template<class InputIterator> typename iterator_traits<InputIterator>::difference_type distance(InputIterator first, InputIterator last);
Benötigt: Wenn
InputIterator
die Anforderungen der Random Access Iterator erfüllt,last
wird von erreichbar seinfirst
oderfirst
soll erreichbar vonlast
sein; andernfalls musslast
vonfirst
erreichbar sein.
Jetzt denke ich, dass Erfordert nicht erfüllt ist.
Was soll der Standardzustand in diesem Fall sein?
Wenn es nicht standardmäßig erlaubt ist, wird es höchstwahrscheinlich zu undefiniertem Verhalten führen, weil es unlogisch ist, Iteratoren verschiedener Vektoren zu vergleichen – Creris
Im Allgemeinen führt das Brechen einer Anforderung zu undefiniertem Verhalten. –