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呢,这也是我们接下来讨论 话题。

原文地址:https://www.cnblogs.com/noticeable/p/14862018.html