how to return a data type?
一个头文件a.h,它的实现文件b.cpp;main.cpp包含头文件a.h。b.cpp,main.cpp中都#include "a.h"
自定义头文件用“”,系统库文件用<>.顺序:最特殊的优先。
类定义
class Sales {
public:
Sales();
Sales(const std::string&);
Sales(std::istream&);
private:
//
}
创建对象:根据实参决定使用哪个构造函数
Sales sale();
Sales sale2("sssss");
Sales sale3(cin);
容器:同一种对象的集合。有顺序容器和关联容器
顺序容器:通过元素在容器中的位置顺序存储和访问元素,如vector<string>
关联容器:按键(key)排序map<>,set<>.
map元素以<key-value>对的形式组织。key是索引,value是存储和读取的数据。若一个键要对应多个实例,则用multimsp或multiset.
map<k,v>::key_type //map容器中,用作所引的键的类型
map<k,v>::mapped_type // 键所关联的值的类型
map<k,v>::value_type //一个pair类型,其first元素是map<k,v>::key_type类型,last元素是map<k,v>::mapped_type。
每个容器类型都定义一个名为irerator 的成员,用于访问容器内的成员。
每个容器都定义一对begin()和end()函数,用来返回迭代器,begin()指向第一个元素,end()指向“末端容器的下一个”,它返回的迭代器叫“超出末端迭代器(off-the-end iter)”,指向不存在的元素,容器为空时,两者返回值一样。
rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素。
c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置。
map<k,v>::iterator i1=world_count.begin(); //map<const string,int> world_count
i1->first="new key"; ++i1->second;
迭代器用解引用(*)操作符表示迭代器指向的元素内容:*i1=“new2” .
http://www.cppblog.com/totti1006/archive/2009/09/01/94955.html(vector容器和iterator)
关于“->”:被称为结构指针运算符, “.”被称为结构运算符。
例子:
struct Vertex{
string a;
int b;
char name[10];
};
Vertex v1;
Vertex *v2=(Vertex*) malloc(sizeof(Vertex)) ;
v1.a="ss";//结构体变量直接访问
v2->b=1; //是指针变量,
(*v2).b=1; //指针结构体变量访问
数据类型对于运行时间的重要性:
我想创建一个有向图,存储结构式是十字交叉表。点保存在数组中,数组元素的类型是一个struct vertex。
图中的insertedge()等成员函数的形参是int行。即每个点在数组的下标。所以我在插入一个边前,要先遍历数组找到下标。这样的时间损耗特别长。遍历所有点的次数与边的个数成正比。即O(ve)。
解决方法。使用关联容器map
map<string,int> 把点的内容与下标关联起来。每次直接通过键值(这里即点的内容)直接查找到下标。每次插入边不需要遍历图。