编程小技巧(六)

一、vector的 back()和pop_back

c.back()返回向量容器的最后一个元素
c.pop_back 弹出向量容器的最后一个元素

while(c.back()==0)
 {
  c.pop_back();
}

二、引用

1.当一个函数需要返回多个变量的值且不使用全局变量的情况下,可以通过引用来实现

vector<int> div(vector<int > &a,vector<int > &b,int &r)
函数类型 返回一个vector
余数 r 通过引用的方式返回

  1. 引用可以减少数组容器拷贝的过程,提高效率。

当一个函数的形参是数组或向量时候,不写引用,实际是将使用的数组拷贝给形参数组,使用引用,则可以不拷贝。

三、stack 数组

许久没用栈了,很多时候都想不到用栈,这里利用删除字符这道题来复习一下栈和栈数组的使用

#include<bits/stdc++.h>
using namespace std;
int n, k;
string s;
stack <int> e[26];
bool vis[100005];
int main() {
    cin >> n >> k >> s;
    int len = s.length();
    for (int i = len - 1; i >= 0; i--) {
        e[s[i] - 'a'].push(i);
    }
    int t = 0;
    for (int i = 1; i <= k; i++) {
        while (e[t].size() == 0) 
            t++;
        vis[e[t].top()] = true;
        e[t].pop();
    }
    for (int i = 0; i < len; i++) {
        if (!vis[i]) cout << s[i];
    }
    system("PAUSE");
    return 0;
}

stack<int > e[26], 一个栈数组
e[s[i]-'a'].push(i);
栈数组的操作

四、字符串的‘+’操作

string s="";
for(...)
{
  s+=a[i];
}
将 a[i]逐个排在字符串s的后面

五、string 从第一个字符开始输入

string s;
cin>>s+1;
这样操作是错误的。 string是C++固定的STL 只能从s[0] 开始读入

六、string的赋值 适用于多个相同字符

string str6 = string(10,'h');     // str6 = "hhhhhhhhhh"
int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        string space = string(n - i, ' ');
        string ch = string(2 * i - 1, 'A' + i - 1);
        cout << space + ch << endl;
    }

cout 计算过程中结果自动转换成整数

    for (int j = i - 1; j >= 1; j--) {
                cout << (char)('1' + j - 1);
            }
当计算和ASCLL 码相关的时候,用cout输出时,应加强制转换

七、 闰年计算

1、 能被400 整除的年份是闰年
2、不能被100整除 但是能被4整除的年份是闰年

int is_leap_year(int year) {
    if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
        return 1;
    }
    return 0;
}

八、string 中的find();函数

两个参数 第二个可以省略
省略第二个参数 则从0位置开始找
返回值为 第一次找到字符或者字符串的位置(注意,第一个参数既可以是字符,也可以是字符串)。
如果找不到则返回npos npos在C++中定义为-1 可以直接和-1比较

 string st1("babbabab");
 cout << st1.find('a') << endl;//1   由原型知,若省略第2个参数,则默认从位置0(即第1个字符)起开始查找
cout << st1.find('a', 2) << endl;//4   在st1中,从位置2(b,包括位置2)开始,查找字符a,返回首次匹配的位置,若匹配失败

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string st1("babbabab");
    cout << st1.find('a') << endl;
    cout << st1.find('a', 2) << endl;
    cout << st1.find('c') << endl;
    if (st1.find('c') == -1)
        cout << "yes" << endl;
    int ans = st1.find('c');
    cout << ans << endl;
    return 0;
}

九、unique 和erase 实现去重

现在总结一下unique,unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址。

a.erase(unique(a.begin(),a.end()),a.end()); 
先unique去重 ,unique函数返回去重后的位置,重复的元素在这个位置之后排列着
然后在用 这个位置 和数组的末尾作为erase的两个参数  将尾巴减去,就实现了去重

十、C++中迭代器

vector<int>::iterator    iter;    //定义一个名为iter的变量

vector<int>    ivec;
vector<int>::iterator    iter1=ivec.bengin();    //将迭代器iter1初始化为指向ivec容器的第一个元素

vector<int>::iterator   iter2=ivec.end();    //将迭代器iter2初始化为指向ivec容器的最后一个元素的下一个位置


*iter                //对iter进行解引用,返回迭代器iter指向的元素的引用
iter->men            //对iter进行解引用,获取指定元素中名为men的成员。等效于(*iter).men
++iter                //给iter加1,使其指向容器的下一个元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,231评论 0 4
  • DAY 01 JAVA简述 Java是由SUN公司在1995年推出的一门高级编程语言,是现今服务器端的首选编程语言...
    周书达阅读 908评论 0 0
  • 标准c++中string类函数介绍 注意不是CString 之所以抛弃char*的字符串而选用C++标准程序库中的...
    杰伦哎呦哎呦阅读 1,321评论 0 8
  • 【转载】原文地址:std::string详解作者:kieven2008 之所以抛弃char*的字符串而选用C++标...
    VAYY阅读 642评论 0 2
  • 不是每一次努力都会有收获,但是,每一次收获都必须努力,这是一个不公平的不可逆的命题。 2020年的春天来的似...
    宁都181刘娇娇阅读 1,130评论 5 9