1.我们可以把一个文件存入一个string对象,使用string类不必担心内存分配,但是,如果是我们要把每一行分配给一个string,要知道有多少个string实例只有读完后才知道。
2.如果有某种“容器”对象,能够容纳所有的不同的对象,C++标准容器类,它是C++的一个重要的强大工具。
3.人们经常会把标准库中的”容器“和”算法“与被称为”STL“(标准模板类库)混淆。STL就是一个叫Alex的惠普员工自己写的C++库,只是比较系统和免费推广的很好而已,STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类 和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文 件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack> 和<utility>。STL一种广泛应用了C++”容器“这个概念的具体实现。
4.vector 最基本标准容器,vector类是一个模板,可以创建Shape的vector、Animal的vector、字符串string的vector,用模板几乎可以创建任何事物的类.
vector<string> 只装string对象的vector
getline() 函数原型
istream& getline ( istream &is , string &str , char delim );
istream& getline ( istream& , string& );
is 进行读入操作的输入流
str 存储读入的内容
delim 终结符
将输入流is中读到的字符存入str中,直到遇到终结符delim才结束。对于第一个函数delim是可以由用户自己定义的终结符;对于第二个函数delim默认为 ‘\n‘(换行符)。
函数在输入流is中遇到文件结束符(EOF)或者在读入字符的过程中遇到错误都会结束。
在遇到终结符delim后,delim会被丢弃,不存入str中。在下次读入操作时,将在delim的下个字符开始读入。
//把一个文件的拷贝到 a vector of string 每一行存一个string #include<iostream> #include<fstream> #include<string> #include<vector> using namespace std; int main() { vector<string> v_str; ifstream In("Demo.cpp"); string line; while(getline(In,line)) //getline()省略第3个默认参数”\n“ 遇到换行符保存字符串 v_str.push_back(line); //add the line to the end push_back()向vector中添加新元素 //add line numbers for(int i=0;i<v_str.size();i++) cout<<i<<":"<<v_str[i]<<endl; //通过操作符”<<“重载,可以把简单有效的下标用于vector return 0; } /* 输出: */
一个单词为一个string
#include<fstream> #include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<string> words; ifstream FileIn("GetWords.cpp"); string word; while(FileIn>>word) //读入每个字符串 word 以空格取得string对象 words.push_back(word); //向words后添加word //输出 for(int i=0;i<words.size();i++) cout <<words[i]<<endl; return 0; }
Create a vector that holds integers
#include<vector> #include<iostream> using namespace std; #define N 20 int main() { vector<int> v_int; for(int i=0; i<N; i++) //这里必须为定数 v_int.push_back(i); //i 为 int 型 for(int i=0; i<v_int.size(); i++) cout<<v_int[i]<<", "; cout<<endl; for(int i=0; i<v_int.size(); i++) v_int[i] *= 2; for(int i=0; i<v_int.size(); i++) cout<<v_int[i]<<", "; cout<<endl; return 0; }