2、ofstream类读取文件指定内容,ifstream类修改文件内容。
3、<vector>头文件,<string>头文件,负责按行保存ifstream读入的数据。
4、示例代码:(这个程序是删除Ollydbg.ini文件中,[Settings]标记后的内容)
原结构为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<string>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std
int main()
{
ifstream infile("E:\\Visual Studio 2012\\Projects\\Primer_V4\\Primer_V4\\Ollydbg.ini")
if(infile)
{
cout <<"Ollydbg.ini is open sucess." <<endl
}
else
{
cerr <<"Ollydbg.ini is fail." <<endl
return 0
}
string line
vector<string>lines
while(getline(infile,line),!infile.eof())
{
lines.push_back(line)
}
infile.clear()
infile.close()
vector<string>::iterator beginPos = find(lines.begin(),lines.end(),"Symbolic data path = ")
vector<string>::iterator endPos = find(lines.begin(),lines.end(),"[Settings]")
for(vector<string>::iterator it = beginPos+1it!=endPosit++)
{
it->erase(it->find_first_of(" "),string::npos)
}
ofstream outfile("E:\\Visual Studio 2012\\Projects\\Primer_V4\\Primer_V4\\Ollydbg_backup.ini")
if(outfile)
{
cout <<"Ollydbg_backup.ini is open sucess." <<endl
}
else
{
cerr <<"Ollydbg_backup.ini is fail." <<endl
return 0
}
for(vector<string>::iterator it=lines.begin()it!=lines.end()it++)
{
outfile <<*it <<endl
}
outfile.clear()
outfile.close()
return 0
}
c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
工具/材料:电脑、c++编译器
1、首先构造一个int类型的空vector向量。
2、可以看到vector的size为0。
3、接着构造了6个元素值为20的vector向量。
4、成功的构造了6个元素为20的向量。
5、同样也将对象复制给另一个vector对象。
6、以下就是程序运行结果了。
相关信息
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
写了一部分,我认为把关键部分都实现了,剩下的你自己写吧。#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
#include <cassert>
using namespace std
typedef unsigned int uint
struct StaticsInfo
{
float max, min, ave
StaticsInfo(float _max, float _min, float _ave)
: max(_max), min(_min), ave(_ave)
{}
}
class Record
{
public:
uint id
string name
float chinese
float math
float english
static uint CHINESE
static uint MATH
static uint ENGLISH
bool operator== (Record other) { return id == other.id}
}
uint Record::CHINESE = (char*)&((Record*)0)->chinese - (char*)&((Record*)0)->id
uint Record::MATH = (char*)&((Record*)0)->math - (char*)&((Record*)0)->id
uint Record::ENGLISH = (char*)&((Record*)0)->english - (char*)&((Record*)0)->id
class Statics
class Table
{
public:
friend class Statics
public:
typedef map<uint, uint>IdMap
typedef IdMap::iterator Imit
public:
bool insert(Record&r)
{
assert(r.chinese >= 0 &&r.chinese <= 100)
if ( idMap.find(r.id) == idMap.end() )
{
Records.push_back(r)
idMap[r.id] = Records.size()-1
return true
}
return false
}
bool del(uint id)
{
Imit it = idMap.find(id)
if ( it != idMap.end() )
{
Records.erase(remove(Records.begin(), Records.end(), Records[it->first]))
idMap.erase(it)
return true
}
return false
}
Record* query(uint id)
{
Imit it = idMap.find(id)
if ( it != idMap.end() )
return &Records[it->first]
return 0
}
StaticsInfo staticsChinese()
StaticsInfo staticsMath()
StaticsInfo staticsEnglish()
private:
vector<Record>Records
map<uint, uint>idMap
}
class Statics
{
public:
Statics(Table* t, uint o) : table(t), offset(o) {}
StaticsInfo operator() ()
{
float max=0, min=100, ave=0, cur
float *beg = (float*)( (char*)&(table->Records[0]) + offset )
for (int i=0i<table->Records.size()++i)
{
cur = *(float*)((Record*)(beg)+i)
if ( max <cur )
max = cur
else if (min >cur)
min = cur
ave += cur
}
ave /= table->Records.size()
return StaticsInfo(max, min, ave)
}
private:
Table* table
uint offset
}
StaticsInfo Table::staticsChinese()
{
return Statics(this, Record::CHINESE)()
}
StaticsInfo Table::staticsMath()
{
return Statics(this, Record::CHINESE)()
}
StaticsInfo Table::staticsEnglish()
{
return Statics(this, Record::CHINESE)()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)