我们就不知道需要多少string--只有读完整个文件后才知道,我们需要某种能够自动扩展
的存放,用以包含所需数量的string对象。
有某种容器对象,能容纳所有的各种对象。
vector类是一个模板,可以有效地用于不同的类型。
用模板可以创建任何事物的类。
vector末尾增加一个新元素,用push_back()。
Insert(),在容器中间加入新元素。
通过下标寻找数组的元素,vector可以像数组那样。
<< >> 用于iostream,操作符重载用于vector
//: C02:Fillvector.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt // Copy an entire file into a vector of string #include <string> #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { vector<string> v; ifstream in("Fillvector.cpp"); string line; while(getline(in, line)) v.push_back(line); // Add the line to the end // Add line numbers: for(int i = 0; i < v.size(); i++) cout << i << ": " << v[i] << endl; getchar(); } ///:~
大部分与前一个程序相同,打开文件并每次将一行读进string对象。 不同的是,这些string
对象被对象压入vector v的尾部。 while循环完成是,整个文件在v内,并驻留内存
while语句之后是for循环语句,与while类似,不过多了一些控制条件。for之后的括号内是
控制表达式,这和while语句相同。
输出
0: //: C02:Fillvector.cpp
1: // From Thinking in C++, 2nd Edition
2: // Available at http://www.BruceEckel.com
3: // (c) Bruce Eckel 2000
4: // Copyright notice in Copyright.txt
5: // Copy an entire file into a vector of string
6: #include <string>
7: #include <iostream>
8: #include <fstream>
9: #include <vector>
10: using namespace std;
11:
12: int main() {
13: vector<string> v;
14: ifstream in("Fillvector.cpp");
15: string line;
16: while(getline(in, line))
17: v.push_back(line); // Add the line to the end
18: // Add line numbers:
19: for(int i = 0; i < v.size(); i++)
20: cout << i << ": " << v[i] << endl;
21: } ///:~