跳到主要内容

std::string rend() 方法

// Non-const version
constexpr iterator rend() noexcept;

// Const version
constexpr const_iterator rend() const noexcept;
constexpr const_iterator crend() const noexcept;

它对应于非反转字符串的最后一个元素。

返回一个反向迭代器

对应于反转字符串的最后一个元素。它对应于非反转字符串的第一个元素**之前**的元素。

尝试解引用末尾之后的迭代器是未定义行为

.

注意

此方法实际上并未反转字符串,它只是返回一个指向字符串第一个元素之前的元素的迭代器,并且 +---++ 运算符的实现略有改变。

例如,it++会递减内部指针,而it--会递增内部指针(以便以相反的顺序遍历容器实际工作)。

如果容器为空,则返回的迭代器将等于 rbegin()

参数

(无)

返回值

指向第一个元素的反向迭代器。

复杂度

常数 - O(1)

rend 和 crend 的区别

对于常量容器c,rend 和 crend 是相同的 - c.rend() == c.crend()

对于非常量类型c的容器,它们返回不同的迭代器

#include <string> 

int main()
{
std::string str = "Hello";
auto it = str.rend(); // Type: std::string::reverse_iterator
*std::prev(it) = 'J'; // ✔ Ok
}

示例

Main.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

int main()
{
std::string s("A man, a plan, a canal: Panama");
{
std::string c;
std::copy(s.rbegin(), s.rend(), std::back_inserter(c));
std::cout << c <<'\n'; // "amanaP :lanac a ,nalp a ,nam A"
}

{
std::string c;
std::copy(s.crbegin(), s.crend(), std::back_inserter(c));
std::cout << c <<'\n'; // "amanaP :lanac a ,nalp a ,nam A"
}
}
输出
amanaP :lanac a ,nalp a ,nam A
amanaP :lanac a ,nalp a ,nam A
本文档源自此 CppReference 页面。它可能因改进或编辑者的偏好而有所改动。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。

std::string rend() 方法

// Non-const version
constexpr iterator rend() noexcept;

// Const version
constexpr const_iterator rend() const noexcept;
constexpr const_iterator crend() const noexcept;

它对应于非反转字符串的最后一个元素。

返回一个反向迭代器

对应于反转字符串的最后一个元素。它对应于非反转字符串的第一个元素**之前**的元素。

尝试解引用末尾之后的迭代器是未定义行为

.

注意

此方法实际上并未反转字符串,它只是返回一个指向字符串第一个元素之前的元素的迭代器,并且 +---++ 运算符的实现略有改变。

例如,it++会递减内部指针,而it--会递增内部指针(以便以相反的顺序遍历容器实际工作)。

如果容器为空,则返回的迭代器将等于 rbegin()

参数

(无)

返回值

指向第一个元素的反向迭代器。

复杂度

常数 - O(1)

rend 和 crend 的区别

对于常量容器c,rend 和 crend 是相同的 - c.rend() == c.crend()

对于非常量类型c的容器,它们返回不同的迭代器

#include <string> 

int main()
{
std::string str = "Hello";
auto it = str.rend(); // Type: std::string::reverse_iterator
*std::prev(it) = 'J'; // ✔ Ok
}

示例

Main.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

int main()
{
std::string s("A man, a plan, a canal: Panama");
{
std::string c;
std::copy(s.rbegin(), s.rend(), std::back_inserter(c));
std::cout << c <<'\n'; // "amanaP :lanac a ,nalp a ,nam A"
}

{
std::string c;
std::copy(s.crbegin(), s.crend(), std::back_inserter(c));
std::cout << c <<'\n'; // "amanaP :lanac a ,nalp a ,nam A"
}
}
输出
amanaP :lanac a ,nalp a ,nam A
amanaP :lanac a ,nalp a ,nam A
本文档源自此 CppReference 页面。它可能因改进或编辑者的偏好而有所改动。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。