C++ reverse函数使用

[STL]C++ reverse、remove、remove_if

1、reverse函数使用

函数功能:将序列[first,last)的元素在原容器中颠倒重排,包含在algorithm库中

C++头文件 -------------- #include

reverse函数用于反转在 [first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素);

reverse函数没有返回值;

时间复杂度O(n);

eg:

1、交换vector容器中元素的顺序

vector<int> v = {5,4,3,2,1}; 
reverse(v.begin(),v.end());//v的值为1,2,3,4,5

2、string类的字符串

string str="abcd";
reverse(str.begin(),str.end());//str结果为dcba

备注leetcode 1190题,反转每对括号间的子串中使用。

2、remove和remove_if函数

2.1、remove(beg,end,const T& value) //移除区间【beg,end)中每一个“value”相同的元素。

remove只是通过迭代器的指针向前移动来删除,将没有被删除的元素放在链表的前面,并返回一个指向新的超尾值的迭代器。由于remove()函数不是成员,因此不能调整链表的长度。remove()函数并不是真正的删除,要想真正删除元素则可以使用erase()或者resize()函数。用法如下:

string s="xxxxx(x";
s.erase(remove(s.begin(), s.end(), '('), s.end());

2.2、 remove_if(beg, end, op) //移除区间[beg,end)中每一个“令判断式:op(elem)获得true”的元素;

remove_if(remove和unique也是相同情况)的参数是迭代器,通过迭代器无法得到容器本身,而要删除容器内的元素只能通过容器的成员函 数来进行,因此remove系列函数无法真正删除元素,只能把要删除的元素移到容器末尾并返回要被删除元素的迭代器,然后通过erase成员函数来真正删除。用法如下:

bool IsSpace(char x) { return x == ' '; }
string str2 = "with some  spaces";
str2.erase(remove_if(str2.begin(),str2.end(),IsSpace),str2.end()); // "withsomespaces"

备注leetcode 1190题,反转每对括号间的子串中使用,清除括号使用:

leetcode 1190代码如下:

    string reverseParentheses(string s) {
        vector <int> tempV;
        for (int i =0 ;i <s.length();i++)
        {
            if (s[i]== '(')
            {
                tempV.push_back(i);
            }
            else if (s[i]==')')
            {
                int l= tempV.back();
                reverse(s.begin() + l + 1, s.begin() + i);
                tempV.pop_back();
            }
        }
        processString(s);
        return s;
    }
    void processString(string &s)
    {
        s.erase(remove(s.begin(), s.end(), '('), s.end());
        s.erase(remove(s.begin(), s.end(), ')'), s.end()); 
    }
};
  • 18
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++reverse函数用于反转容器的元素的顺序。引用\[1\]给出了几种使用reverse函数的示例。例如,可以使用reverse函数来反转字符串、向量或数组。具体使用方法是将要反转的容器的起始位置和结束位置作为参数传递给reverse函数。引用\[2\]和引用\[3\]的代码示例展示了如何使用reverse函数来反转向量和字符串。 在引用\[2\]的代码示例,首先创建了一个整数向量v,并将元素1、2、3添加到向量。然后使用for循环打印出向量的元素。接下来,调用reverse函数将向量v的元素反转。最后,再次使用for循环打印出反转后的向量v的元素,输出结果为3、2、1。 在引用\[3\]的代码示例,首先创建了一个字符串a,并将字符串"123"赋值给a。然后调用reverse函数将字符串a的字符反转。最后,打印出反转后的字符串a,输出结果为"321"。 因此,使用C++reverse函数可以方便地反转容器的元素的顺序。 #### 引用[.reference_title] - *1* [C++reverse函数](https://blog.csdn.net/weixin_46024428/article/details/116094154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [reverse函数(C++)](https://blog.csdn.net/weixin_51566349/article/details/128459338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值