zoukankan      html  css  js  c++  java
  • vector系列--creating vector of local structure、vector of structs initialization

    之前一直没有使用过vector<struct>,现在就写一个简短的代码:

    #include <vector>
    #include <iostream>
    int main() {
        struct st { int a; };
        std::vector<st> v;
        v.resize(4);
        for (std::vector<st>::size_type i = 0; i < v.size(); i++) {
            v.operator[](i).a = i + 1; // v[i].a = i+1;
        }
    
        for (int i = 0; i < v.size(); i++)
        {
            std::cout << v[i].a << std::endl;
        }
    }
    

      用VS2015编译成功,运行结果:
    1
    2
    3
    4

    但是,这是C++11之后才允许的,之前编译器并不允许你写这样的语法,不允许vector容器内放local structure。

    更进一步,如果struct里面有好几个字段呢?

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    struct subject {
        string name;
        int marks;
        int credits;
    };
    
    
    int main() {
        vector<subject> sub;
    
        //Push back new subject created with default constructor.
        sub.push_back(subject());
    
        //Vector now has 1 element @ index 0, so modify it.
        sub[0].name = "english";
    
        //Add a new element if you want another:
        sub.push_back(subject());
    
        //Modify its name and marks.
        sub[1].name = "math";
        sub[1].marks = 90;
    
        sub.push_back({ "Sport", 70, 0 });
        sub.resize(8);
        //sub.emplace_back("Sport", 70, 0 );
    
        for (int i = 0; i < sub.size(); i++)
        {
            std::cout << sub[i].name << std::endl;
        }
    
    }
    

      

    但是上面的做法不好,我们应该先构造对象,后进行push_back 也许更加明智。
    subject subObj;
    subObj.name = s1;
    sub.push_back(subObj);

    这个就牵扯到一个问题,为什么不使用emplace_back来替代push_back呢,这也是我们接下来讨论 话题。

  • 相关阅读:
    2020年秋招三星面试题
    物联网金融和互联网金融的区别与联系
    数据库事务的4种隔离级别
    Access-cookie之sqlmap注入
    SDL-软件安全开发周期流程
    图片马的制作
    ssrf内网端口爆破扫描
    逻辑漏洞_验证码绕过_密码找回漏洞
    平行越权与垂直越权
    xff注入
  • 原文地址:https://www.cnblogs.com/noticeable/p/14862018.html
Copyright © 2011-2022 走看看