程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的vector系列--creating vector of local structure、vector of structs initialization

實戰c++中的vector系列--creating vector of local structure、vector of structs initialization

編輯:C++入門知識

實戰c++中的vector系列--creating vector of local structure、vector of structs initialization


之前一直沒有使用過vector,現在就寫一個簡短的代碼:

#include 
#include 
int main() {
    struct st { int a; };
    std::vector v;
    v.resize(4);
    for (std::vector::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
#include
#include
using namespace std;
struct subject {
    string name;
    int marks;
    int credits;
};


int main() {
    vector 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呢,這也是我們接下來討論 話題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved