• 实战c++中的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呢,这也是我们接下来讨论 话题。

  • 相关阅读:
    springMVC准确定位多个参数对象的属性
    java正则表达式应用
    mybatis与mysql插入数据返回主键
    xml文件中怎么写小于号 等特殊符号
    sqlserver 分页查询 举例
    Python报错:IndentationError: expected an indented block
    统计输入的汉字,数字,英文,other数量
    easyui+ajax获取同表关联的数据
    JAVA死锁
    mybatis自动生成mapper,dao映射文件
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7237670.html
Copyright © 2020-2023  润新知