如何使用向量和int作为类的构造函数

时间:2011-10-14 23:03:18

标签: c++ constructor

如果我有一个课foo那么

class foo{
   vector <int> vec;
   int someint;

   public:
   foo(number n): someint(n){}


}

我如何为vector编写class foo的构造函数?不过,我可以使用:

int get_someint() const{

  return someint;
}

要返回int,但是矢量呢?

3 个答案:

答案 0 :(得分:2)

使用复杂数据类型时,通常最好使用引用或const引用,如下所示:

class A
{
public:
    A()  {}  // default construct of A, v_ is empty

    A(const std::vector<int>& source)
      : v_(source)  // construct A, given a vector that is 
                    // copied into v_
    {
    }

    // returns an immutable reference to v_
    const std::vector<int>& get_v() const
    {
       return v_;
    }

    // returns a mutable reference to v_
    std::vector<int>& get_v()
    {
        return v_;
    }
private:
    std::vector<int> v_;
};

使用示例:

A a_no_vec;  // A has an empty vector v_

std::vector<int> src;

src.push_back(16);
src.push_back(19);

A a_with_vec(src);  // A has a vector that is a copy of src

答案 1 :(得分:0)

你可以这样做。出于所有目的,将vector<int>视为普通变量(例如int),因此您可以写:

class foo{
   vector <int> vec;
   int someint;

   public:
   foo(number n, vector<int> v): someint(n), vec(v){}
}

它会被内外复制,这可能意味着很多内存副本。这就是为什么对于这样大的对象,使用通过引用传递(通过指针或引用)。例如,要返回向量:

vector<int> const& the_vector()
{ return inner_vector; } // no copy

,构造函数也是foo(number n, vector<int> const& v)。此外,如果在内部您不必存储向量的副本,则可以使用指向该向量的指针或引用作为成员,而不是向量副本本身,即,类是:

class foo{
   vector <int>& vec;
   int someint;

   public:
   foo(int n, vector<int>& v): someint(n), vec(v){}
}

(注意参考文献)。与指针相同。

答案 2 :(得分:0)

您不需要为向量编写构造函数。 Vector已经拥有了它的构造函数。你还可以在返回int时简单地返回一个向量,例如

const std::vector<int> & getVec()
{
   return vec;
}