C++学习-2023/12/11-2.vector容器

凝望一下深渊—看的多了也就有一丢丢意识

都是搬砖的码农,又不是干研发,大不了删库跑路(sudo rm -rf *)

开个玩笑,开个玩笑

NO.1 vector是什么? 动态数组
NO.2 vector的基本操作
2.1存取数据
2.2遍历
NO.3 操作自定义类型

有现成的函数就直接调用,没必要自己写轮子还不安全—道听途说

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
#include <string>

#define STRINGMAX 40
#define AGE 88
void CreateAndInit()
{
    //1.不带长度, 用数据初始化创建方式
    //这个视频教师命个变量加个i,有啥规则?后面再看看,有小伙伴告诉我也行
    std::vector<int> iArray = { 1,2,3,4,5,6,7 };
    for (auto v : iArray) {
        std::cout << v << "\t";
    }
    std::cout << "\n";
    //for 循环也行
    //大佬都喜欢++i,说专业,我也不知道哪里专业
    //万金油:XXX.size();-----看看实际项目中应该也用的多
    for (int i = 0; i < iArray.size(); ++i)
    {
        std::cout << iArray[i] << "\t";
    }
    std::cout << "\n";

    
    //迭代器的方式-----MD,知识盲区-先有个印象;
    std::vector<int>::iterator iter;
    for (iter = iArray.begin(); iter != iArray.end(); ++iter) {
        std::cout << *iter << "\t";
    }
    std::cout << "\n";


    //2.创建方式,带长度的创建方式
    std::vector<std::string> strArray(3);  //3: 0,1,2
    for (int i = 0; i < 3; ++i) {
        std::string str = "爱莉";
        strArray[i] = str + std::to_string(i);

    }
    std::vector<std::string>::iterator iter2;
    strArray.push_back("2B铅笔");

    for (iter2 = strArray.begin(); iter2 != strArray.end(); ++iter2) {
        std::cout << *iter2 << "\t";
    }

    //记录一下视频里面的报错:vector subscript out of range  -留个印象
    //报错写的代码 : //strArray[3] = "爱莉4";
    //超过原来长度的数据插入方式,只能通过成员函数的方式插入
    //strArray.push_back("2B铅笔"); //尾插法,原容量的末位:什么原理:申请内存,在原内存后面扩展内存插入

    //所以一般在使用动态数组,有个习惯
    //带长度创建的vector,一般都是用带下标法使用
    //不带长度创建的vector,采用通过成员函数的方式操作

    //视频里面的老鸟说一般都不带长度创建,基本也是,带长度都是练习着玩

    std::vector<std::string> str1;
    for (int i = 0; i < 3; ++i) {
        std::string strTemp;
        std::cin >> strTemp;
        str1.push_back(strTemp);
    }
    for (auto v : str1) {
        std::cout <<  v << "\t";
    }
    std::cout << "\n";


    //一段容器去给另一个容器去做初始化---有个印象:assign
    int arrayNum[3] = { 1,2,3 };
    std::vector <int> dataNum;
    dataNum.assign(arrayNum, arrayNum + 3);
    for (auto v : dataNum)
    {
        std::cout << v << "\t";
    }
    std::cout << "\n"; 
}

void VectorFunction()
{
    std::vector <int> dataNum = {1,2,3,4,5,6,7,8,9,10};
    std::cout << dataNum.size() << std::endl;
    std::cout << dataNum.capacity() << std::endl;
    std::cout << dataNum.max_size() << std::endl;

    std::cout << dataNum.at(4) << std::endl; //访问元素最好用这个,记得会有数组越界报警
    std::cout << *dataNum.data() << std::endl;//访问元素地址
    std::cout << dataNum.front() << std::endl;//第一个元素
    std::cout << dataNum.back() << std::endl;//最后一个元素

    //删除元素 dataNum.erase();
    auto iter = dataNum.begin();
    //find()-----------有怎么个函数---留个印象
    for (; iter != dataNum.end(); ++iter) {
        if (*iter == 4) {
            break;
        }
    }
    dataNum.erase(iter);
    for (auto v : dataNum)
    {
        std::cout << v << "\t";
    }
    std::cout << "\n";

    //持续删除重复元素
    std::vector <int> dataNum2 = { 1,2,2,2,3,4,5,6,7,8,9,10 };
    for (auto dIter = dataNum2.begin(); dIter != dataNum2.end(); ) {
        if (*dIter == 2) {
            dIter = dataNum2.erase(dIter);
        }
        else{
            ++dIter;
        }
    }
    for (auto v : dataNum2)
    {
        std::cout << v << "\t";
    }
    std::cout << "\n";

    //增,删,改,查
    //改--试试--OK
    std::vector <int> dataNum3 = { 1,2,3,4,5,6,77,8,9,10, };
    auto iter3 = dataNum3.begin();
    //find()-----------有怎么个函数---留个印象
    for (; iter3 != dataNum3.end(); ++iter3) {
        if (*iter3 == 77) {
            *iter3 = 7;
        }
    }
    //dataNum.erase(iter);
    for (auto v : dataNum3)
    {
        std::cout << v << "\t";
    }
    std::cout << "\n";
}

//操作自定义类型
class ME
{
public:
    //初始化参数列表---MD都忘记了
    ME(){}
    ME(std::string, int age) :name(name), age(age) {}
    //啥是友元????
    friend std::istream& operator>>(std::istream& in, ME& object)
    {
        in >> object.name >> object.age;
        return in;
    }
    //重载好强大
    //注意方向  >>  << 
    friend std::ostream& operator<<(std::ostream& out, ME& object)
    {
        out << object.name << "\t" << object.age << std::endl;
        return out;
    }

protected:
    std::string name;
    int age;
};

void opertorUserData()
{
    std::vector<ME>mmArray;
    ME mm;
    while (1) {
        std::cout << "请输入美女的姓名和年龄" << std::endl;
        std::cin >> mm;
        mmArray.push_back(mm);
        char userKey = 0;
        std::cout << "是否继续(Y/N)?----->':";
        std::cin >> userKey;
        if (userKey == 'N' || userKey == 'n') {
            break;
        }
    }
    std::cout << "姓名" << "\t" << "年龄" << std::endl;
    for (auto v : mmArray)
    {
        std::cout << v;
    }
    std::cout << "\n";


}



int main()
{
    std::cout << "Hello World!\n";
    //TestCin();
    //CreateAndInit();
    //VectorFunction();
    opertorUserData();
    //vector可以当参数传递
}

插曲:
工作就是让你早日赚钱赎身,认清现实。
没人会因为没有好好工作而遗憾终身,都是遗憾吃喝玩乐。
潇洒去!后面再慢慢学习

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值