实验四
vector.hpp
#pragma once #include<iostream> #include<stdexcept> using namespace std; template<typename T> class Vector { private: int size; T* ptr; public: Vector(int size, int value = 0) :size{ size } { if (size < 0) { throw length_error("negative size"); } ptr = new T[size]; for (int i = 0; i < size; i++) { ptr[i] = value; } } int get_size()const { return size; } T& at(int index)const { if (index < 0 || index >= size) throw out_of_range("index out of range"); return ptr[index]; } T& at(int index) { return static_cast<const Vector<T>*>(this)->at(index); } T& operator[](int index)const { if (index < 0 || index >= size) throw out_of_range("index out of range"); return ptr[index]; } T& operator[](int index) { return static_cast<const Vector<T>*>(this)->operator[](index); } }; template<typename T1> void output(const Vector<T1>& v) { for (int i = 0; i < v.get_size();i++) { cout << v[i] << ", "; } cout << endl; }
test.cpp
#include <iostream> #include "C:\Users\Administrator\Documents\Vector.hpp" void test1() { using namespace std; int n; cout << "Enter n: "; cin >> n; Vector<double> x1(n); for(auto i = 0; i < n; ++i) x1.at(i) = i * 0.7; cout << "x1: "; output(x1); Vector<int> x2(n, 42); const Vector<int> x3(x2); cout << "x2: "; output(x2); cout << "x3: "; output(x3); x2.at(0) = 77; x2.at(1) = 777; cout << "x2: "; output(x2); cout << "x3: "; output(x3); } void test2() { using namespace std; int n, index; while(cout << "Enter n and index: ", cin >> n >> index) { try { Vector<int> v(n, n); v.at(index) = -999; cout << "v: "; output(v); } catch (const exception &e) { cout << e.what() << endl; } } } int main() { cout << "测试1: 模板类接口测试\n"; test1(); cout << "\n测试2: 模板类异常处理测试\n"; test2(); }
实验结果
实验5
test.cpp
#include <string> #include <vector> #include<iomanip> #include<algorithm> using std::string; using std::ostream; using std::istream; using std::setw; using std::setprecision; using std::setiosflags; using std::ios_base; class People{ private: string no; string name; string major; int score; public: People()=default; ~People()=default; int get_score() const{return score;} string get_string() const{return major;} friend ostream& operator<<(ostream &out, const People &c); friend istream& operator>>(istream &in, People &c); }; ostream& operator<<(ostream &out, const People &c) { out << setiosflags(ios_base::left); out << setw(15) << c.no << setw(15) << c.name << setw(15) << c.major << setw(15) << c.score; return out; } istream& operator>>(istream &in, People &c) { in >> c.no >> c.name >> c.major >> c.score; return in; } bool compare_by_order(const People &p1,const People &p2) { if(p1.get_string()<p2.get_string()) return true; if(p1.get_string()==p2.get_string()) return p1.get_score()>p2.get_score(); return false; } void output(std::ostream &out, const std::vector<People> &v) { for(auto &i: v) out << i << std::endl; } void save(const std::string &filename, std::vector<People> &v) { using std::ofstream; ofstream out(filename); if(!out.is_open()) { std::cout << "fail to open file to write\n"; return; } output(out, v); out.close(); } void load(const std::string &filename, std::vector<People> &v) { using std::ifstream; ifstream in(filename); if(!in.is_open()) { std::cout << "fail to open file to read\n"; return; } std::string title_line; getline(in, title_line); People t; while(in >> t) v.push_back(t); in.close(); } void test(){ using namespace std; vector<People> v; load("data5.txt",v); sort(v.begin(),v.end(),compare_by_order); output(cout,v); save("ans5.txt",v); } int main(){ test(); }
实验结果
标签:std,文件,const,index,int,实验,using,模板,size From: https://www.cnblogs.com/hinaou/p/18613013