C++基础回顾(vector的使用)

前言

最近用python刷了些算法题不过总觉得不太顺手,很多题目总是会超时,想了想还是用C++来刷吧。由于已经很久没有敲过C++的代码,所以需要对一些常用的知识进行回顾。对于刷算法题目来说,STL应该算是比较常用的一个工具了,故优先对此进行回顾。文章中的主要内容都是来源于郭炜老师在中国大学慕课上的公开课( 程序设计与算法(三)C++面向对象程序设计)以及C++ Primer Plus这本书。另外,在文章的最后我也会用一道LeetCode的题目来简单运用一下今天的知识。

一、vector的简单介绍

标准库类型vector表示对象的集合。其中所有对象的类型都相同。类似数组,集合中的每个对象同样有索引,用于随机访问对象。因为vector容纳着其他对象,所以其亦被称之为“容器”(更准确的说是“顺序容器”)。

1.1 定义和初始化vector对象

vector<int> v1(10,1);  //vector<T> v1(n, val)  v1包含了n个重复的元素,每个元素的值都是val
          //vector<int> v2 = {1,2,3,4,5};   //vector<T> v2={a,b,c,d...}  v2包含了列出的所有元素
int a[] = {1,2,3,4,5};
vector<int> v3(a,a+5); //将数组a的全部元素用来初始化此vector 

1.2 vector对象的常用操作

int len = v1.size();  //获取v1的元素个数 
cout<<"v1的长度为:"<<len<<endl; 
for(int i = 0; i<5 ; i++){
    v3.push_back(i+6);  //在v3的末尾添加新的元素 
} 
v1.insert(v1.begin(),2);    //在v1最开始之处插入一个值为2的元素,此时v1为21111111111
v3.insert(v3.end(),v1.begin(),v1.begin()+5);    //此段代码的作用是将v1中的一段元素放到v3中来
                                                //v3.end()代表放置的起始位置,后面两个关键字是
                                        //片段在v1中的起始以及终止位置 ,此时v3结果为1234567891011111 

1.3 vector的遍历

void printVector(vector<int> vec){   //一个常规遍历vector的函数 
    vector<int>::iterator i;    //迭代器类型的变量的声明 
    for(i=vec.begin();i != vec.end(); ++i){  
        if(i == vec.end()-1)     //在最后一个元素时进行换行 
            cout<<*i<<endl;
        else
            cout<<*i;
    }
}

事实上,存在更简便的遍历方式。但是由于我现在所用的编译器不支持C++11,在此仅仅给出代码。

首先,你要先给出一个print()函数。

void print(int n)
{
    cout<<n<<endl;
}

其次,应用for_each函数进行遍历即可,代码如下。

for_each(v1.begin(),v1.end(),print);//用for_each进行遍历  

以上的代码链接

二、解决一道与此相关的算法题

leetcode算法题

下方为解决代码

class Solution {
public:
        vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> result;
        int flag=0;
        for(auto i = nums.begin(); i!= nums.end(); i++){
            for(auto j = nums.begin(); j!= nums.end(); j++){
                if(target - *i == *j && i!= j){
                    result.push_back(i-nums.begin());
                    result.push_back(j-nums.begin());
                    flag = 1;
                    break;
                }
                else{}    
            }
        if(flag == 1)
        {
            break;
        }
    }
       return result;     
    }
};

可以看出,这里是采用了两层循环,即为最简单的蛮力法。虽然编译通过,但是效率是极其低下的,仅仅超越了15%的用户。不过今天只是拿这个例子来将刚才学到的知识联系一下,以后,我们再考虑对此算法进行优化,这里就暂且用这个笨方法做着吧。

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

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,092评论 1 32
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,216评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,046评论 0 4
  • 一. Java基础部分.................................................
    wy_sure阅读 3,805评论 0 11
  • 有一只100万年也不死的猫,它死了100万次了,又活了100万次。又100个人宠爱过它,它是国王的猫,然后又...
    水晶_d1e7阅读 195评论 0 0