一个类定义它的向量需要什么?

时间:2015-11-07 13:51:43

标签: c++ class vector

我有两个简单的代码,我不知道它们的问题是什么,但我怀疑我无法使用当前代码定义类类型的向量。 任何帮助!

 #include <iostream>
#include <cmath>
#include <algorithm>
#include "Pair.h"
#include <vector>
#include <string>
using namespace std;


class Function{
public: 
    Function();
    Function(const Function& g);

/*  Function operator+(const Pair& input) const;
    Function& operator+=(const Pair& input);

    Function operator-(const Pair& input) const;
    Function& operator-=(const Pair& input);

    int& operator()(int input);

    Function operator+(const int input) const;
    Function operator-(const int input) const;
    Function operator/(const int input) const;
    Function operator*(const int input) const;

    Function& operator++();
    //Function& operator()++;
    Function& operator--();
    //Function& operator()--;

    Function operator=(const Function& input) const;
    Function operator+(const Function& input) const;
    Function& operator+=(Function& input);
    Function& operator-=(Function& input);
    bool operator==(Function& input) const;

    Function operator|(const Function &input) const;
    Function& operator|=(Function &input);

    Function operator()(const Function &input) const;

    ostream operator<<(const Function &input) const;

*/  
    vector<Pair> get_function_pairs() const;
    //void set_function_pairs(Function g);
    void add_pair(Pair g);
    void add_vector_of_pairs(vector<Pair> g);
    void sort_pairs();
private:
    vector<Pair> function_pairs;
};



void Function::add_pair(Pair g){
    function_pairs.push_back(g);
}

/*vector<Pair> Function::get_function_pairs() const{
    return function_pairs;
}

Function::Function(const Function& g){
    function_pairs.clear();
    for(int i = 0; i < g.get_function_pairs().size(); i++){
        function_pairs.push_back(g.get_function_pairs()[i]);
    }
}

/*Function Function::operator+(const Pair& input) const{
    Function a(*this);
    a.add_pair(input);
    return a;
}*/

/////////////////////////

  #include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

class Pair{
public:
    Pair(){};
    Pair(int xx, int yy);
    vector<int> get_pair();
    string pair_string();
private:
    int x, y;
    string pair_show;
    stringstream temp;
};

Pair::Pair(int xx, int yy){
    x = xx;
    y = yy;
    temp <<"("<<x <<","<<y<<")";
    temp >> pair_show;
    temp.clear(); 
}

vector<int> Pair::get_pair(){
    vector<int> result;
    result.push_back(x);
    result.push_back(y);
    return result;
}

string Pair::pair_string(){
    return pair_show;
}

P.S:我不能将c ++ 11用于我的作业,所以我决定通过使用sstream库将我的int改为string。

1 个答案:

答案 0 :(得分:1)

问题是由于stringstream成员,concepts CopyAssignable和CopyConstructible未得到满足。

这也可以看作是一个提示,包括一个重量级的东西,如stringstream成员只是为了输出是一个设计缺陷,更不用说重新发明std::pair轮。

但无论如何 - 这个

#include <vector>
#include <sstream>

class Pair{
public:
    Pair() : x(0), y(0), s() {}
    Pair(int xx, int yy) : x(xx), y(yy), s() {}
    Pair(const Pair& rhs) : 
        x(rhs.x), y(rhs.y), s(rhs.s.str()) {}
    Pair& operator=(const Pair& rhs) { 
        x = rhs.x; 
        y = rhs.y; 
        s.str() = rhs.s.str();
        return *this;
    }
private:
    int x, y;
    std::stringstream s;
};

int main()
{
    std::vector<Pair> pairs;
    pairs.push_back(Pair());
    pairs.push_back(Pair(0,1));

    return 0;
}

compiles

相关问题