在 C++ 中创建 class 对象向量的问题

Issues creating a vector of class object in c++

我创建了以下 class

#include "cliques.h"
#include "vector"
#include <iostream>
using namespace std;

cliques::cliques(){

}

cliques::cliques(int i) {
    clique.push_back(i);
    clique_prob = 1;
    mclique_prob = 1;
}

cliques::cliques(const cliques& orig) {
}

cliques::~cliques() {
}

void cliques::addvertex(int i) {

clique.push_back(i);

}



double cliques::getclique_prob() const {
    return clique_prob;
}

double cliques::getMaxclique_prob() const {
    return mclique_prob;
}

void cliques::showVertices() {
    for (vector<int>::const_iterator i = clique.begin(); i !=clique.end(); ++i)
    cout << *i << ' ';
    cout << endl;
}

vector<int> cliques::returnVector() {
    return clique;
}

void cliques::setclique_prob(double i) {
    clique_prob = i;
}

void cliques::setMaxclique_prob(double i) {
    mclique_prob = i;
}

这是头文件

#include "vector"


#ifndef CLIQUES_H
#define CLIQUES_H

class cliques {
public:
    void addvertex(int i);
    cliques();
    cliques(int i);
    cliques(const cliques& orig);
    virtual ~cliques();
    double getclique_prob() const;
    double getMaxclique_prob() const;
    void showVertices();
    std::vector<int> returnVector();
    void setclique_prob(double i);
    void setMaxclique_prob(double i);
private:
    float clique_prob;
    float mclique_prob;
    std::vector <int> clique;
};

#endif /* CLIQUES_H */

我想创建这些对象的向量以实现堆

int main(int argc, char** argv) {


cliques temp(1);
cliques temp1(2);
temp.setclique_prob(0.32);
temp.setclique_prob(0.852);
temp.showVertices();
temp1.showVertices();

vector <cliques> max_heap;
max_heap.push_back(temp);
max_heap.push_back(temp1);
double x =max_heap.front().getclique_prob();
cout<<"prob "<<x<<endl;
cliques y = max_heap.front();
y.showVertices();

//make_heap (max_heap.begin(),max_heap.end(),max_iterator());
//sort_heap (max_heap.begin(),max_heap.end(),max_iterator());

return 0;
}

由于我不知道的原因 none 我的 class 函数在我创建矢量后正常工作,这意味着虽然以下函数按预期工作

temp.showVertices()

下一个没有,

 y.showVertices()

您错过了

的实施
cliques::cliques(const cliques& orig) {
}

STL 向量在向其添加值时使用内部复制构造函数。由于您的 cliques class 不分配任何内存,您只需从代码中删除复制构造函数,编译器就会为您生成一个。