之前一直沒有使用過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呢,這也是我們接下來討論 話題。