C++中的标准容器类 container类

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;
}
时间: 2024-10-10 04:44:27

C++中的标准容器类 container类的相关文章

STL标准容器类学习笔记之(Vector/Deque/List)

STL标准容器类简介 1.顺序性容器 vector相当与数组,从后面快速的插入与删除,直接访问任何元素 deque双队列,从前面或后面快速的插入与删除,直接访问任何元素 list双链表,从任何地方快速插入与删除 2.关联容器 set快速查找,不允许重复值 multiset快速查找,允许重复值 map一对一映射,基于关键字快速查找,不允许重复值 multimap一对多映射,基于关键字快速查找,允许重复值 3.容器适配器 stack后进先出 queue先进先出 priority_queue最高优先级

第19课 Qt中的标准对话框(上)

1. 标准对话框 (1)Qt为开发者提供了一些可复用的对话框类型 (2)Qt提供的可复用对话框全部继承自QDialog类 (3)Qt中的标准对话框遵循相同的使用方式(三板斧) //1.定义对话框对象(第1板斧) DialogType dlg(this); //2.设置对话框属性(第2板斧) dlg.setPropertyXXX(value); if(dlg.exec() == DialogType::value) //3.打开对话框(第3板斧) { //4.获取对话框数据 Type v = dl

【转 Java 中的内部类和匿名类

 Java 中的内部类和匿名类 2008-10-16 13:47:41 标签:Java 内部类 匿名类 休闲 职场 Java 中的内部类和匿名类* 为什么需要内部类? Java 内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时候,你可以建一个内部类实现这个接口.由于内部类对外部类的所有内容都是可访问的,所以这样做可以完成所有你直接实现这个接口的功能. 不过你可能要质疑,更改一

Eclipse中创建标准web工程以及标准目录结构说明

最近公司有个Web项目,项目结构如下: 虽然运行没有错,但是实在是别扭,标准的web应用一般不采用这种结构: 因此总结一下:     1.如何在Eclipse中创建一个标准的Web应用.     2.标准Web应用推荐的目录结构.   第一:如何在Eclipse中创建一个标准的web应用:(假设项目名称为:myweb) 1) PS:projectname一般全小写字母,最好不要出现数字和大写字母. 2) PS:default output flolder要根据project_name修改. 3)

C++ 标准库异常类

转自:http://blog.csdn.net/zhq651/article/details/8425579 exception C++标准库异常类继承层次中的基类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下: namespace std { class exception { public: exception() throw(); //不抛出任何异常 exception(const exception& e

MFC中的几个常用类——CFileDialog

1 简介 CFileDialog类封装了Windows常用的文件对话框.常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能. 可以用 构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要.每种情况下,对话框都与标准MFC对话框一样工作.因为它们都是 CCommonDialog类的 派生类. 要使用CFileDialog,先用CFileDialog 构造函数构造一个对象,当创建了一个对话

bjective-C 中核心处理字符串的类是 NSString 与 NSMutableString

Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重新给这个字符串赋值.而NSMutableString 创建赋值以后可以动态在该字符串上更改内容与长度. 1.创建经典的NSString字符串 NSString 与 char* 最大的区别就是 NSString是一个objective对象,而char* 是一个字节数组.@+ " 字符串 " 

ArcGIS Engine问答:为什么地理数据库中不能产生同名要素类

之所以产生这样的问题,其原因是无论一个要素类是直接放在工作空问中,还是放在工作空问的一个要素数据集中,这些差别仅仅是逻辑上的,而它们的物理组成都是数据库中的一张二维表,并目表名就是要素类的名字,在一个数据库中不能出现两个同名的二维表,因此也就不能产生两个同名的要素类. 也就是说如果在工作空问中存在一个名为A的要素类和B的要素数据集,B中如果再产生一个名为A的要素类是不会成功的. 因此可以使用IFeatureWorkspace::OpenFeatureClass方法可以打开工作空问中的任何一个要素

ios 中Category类别(扩展类)专题总结

原创地址   http://www.code4blog.com/archives/294 类别 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,可以为现有的类添加新方法,这种为现有的类添加新方法的方式称为类别catagory,他可以为任何类添加新的方法,包括那些没有源代码的类. 类别使得无需创建对象类的子类就能完成同样的工作 一.创建类别 1.声明类别 声明类别与声明类的形式很相似 @interface  NSString(NumberConvenienc