path lexically_normal() const;
Returns: Путь, имя которого в универсальном формате normal form совпадает с именем пути в универсальном формате *this.
[ Example:
assert(path("foo/./bar/..").lexically_normal() == "foo/"); assert(path("foo/.///bar/../").lexically_normal() == "foo/");
Вышеупомянутые утверждения будут успешными. В Windows directory-separatorсимволы возвращаемого пути будут обратной косой чертой, а не косой чертой, но это не влияет на path равенство. ] — end example
path lexically_relative(const path& base) const;
Effects: Если root_name() != base.root_name() есть true или is_absolute() != base.is_absolute() есть true или !has_root_directory() && base.has_root_directory() есть true, возвращается path(). Определяет первый несовпадающий элемент *this и base как будто по:
auto [a, b] = mismatch(begin(), end(), base.begin(), base.end());
Потом,
если a == end() и b == base.end(), возвращается path("."); иначе
пусть n будет количество filenameэлементов [b, base.end()) , которых нет, dot или dot-dot минус количество, которые есть dot-dot. Если n<0, возвращается path(); иначе
возвращает объект класса path , созданный по умолчанию, за которым следует
приложение operator/=(path("..")) n времен, а затем
применение operator/= для каждого элемента в [a, end()).
[ Example:
assert(path("/a/d").lexically_relative("/a/b/c") == "../../d"); assert(path("/a/b/c").lexically_relative("/a/d") == "../b/c"); assert(path("a/b/c").lexically_relative("a") == "b/c"); assert(path("a/b/c").lexically_relative("a/b/c/x/y") == "../.."); assert(path("a/b/c").lexically_relative("a/b/c") == "."); assert(path("a/b").lexically_relative("c/d") == "../../a/b");
Вышеупомянутые утверждения будут успешными. В Windows directory-separatorсимволы возвращаемого пути будут обратной косой чертой, а не косой чертой, но это не влияет на path равенство. ] — end example
[ Note: Если требуется символическая ссылка, следующая за семантикой, используйте операционную функцию relative(). ] — end note
[ Note: Если normalization необходимо , чтобы обеспечить последовательное согласование элементов, применяются lexically_normal() к *this, baseили обоих. ] — end note
path lexically_proximate(const path& base) const;
Returns: Если значение lexically_relative(base) не является пустым путем, верните его. В противном случае вернитесь *this.
[ Note: Если требуется символическая ссылка, следующая за семантикой, используйте операционную функцию proximate(). ] — end note
[ Note: Если normalization необходимо , чтобы обеспечить последовательное согласование элементов, применяются lexically_normal() к *this, baseили обоих. ] — end note