美文网首页程序员
C++基础回顾(vector的使用)

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

作者: 我倒要看看名字最长可以取多长长 | 来源:发表于2019-01-22 23:17 被阅读14次

前言

最近用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%的用户。不过今天只是拿这个例子来将刚才学到的知识联系一下,以后,我们再考虑对此算法进行优化,这里就暂且用这个笨方法做着吧。

相关文章

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

    前言 最近用python刷了些算法题不过总觉得不太顺手,很多题目总是会超时,想了想还是用C++来刷吧。由于已经很久...

  • C++ STL 之 vectot(四)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 容器删除元素 使用 clear() ...

  • C++ STL 之 vectot(三)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 容器增加元素 vector 容器增加...

  • C++ STL 之 vectot(二)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 迭代器使用 与 array 类似,v...

  • 标准模板库-vector

    标准模板库-vector 1. vector简介 vector为C++的STL中的模板数组容器。在使用时需要包含#...

  • c++学习之vector(容器)、priority_queue(

    c++学习之vector(容器) (转刘同学_0116) 使用vector需要包含头文件#include

  • C++:vector erase删除符合条件的元素

    绪 C++ vector中实际删除元素使用的是容器vecrot中std::vector::erase()方法。C+...

  • APP开发实战95-动态Vector基础

    24.5Vector动态图的使用 24.5.1动态Vector基础 动态的Vector需要通过animated-v...

  • C++ vector使用

    vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。它相当于一个动态的数组,当程序员...

  • C++ Vector用法

    vector 是向量类型,它可以容纳许多类型的数据,称其为容器。vector 是C++ STL的一个重要容器,使用...

网友评论

    本文标题:C++基础回顾(vector的使用)

    本文链接:https://www.haomeiwen.com/subject/zsddjqtx.html