如果我有一个课foo那么
class foo{
vector <int> vec;
int someint;
public:
foo(number n): someint(n){}
}
我如何为vector
编写class foo
的构造函数?不过,我可以使用:
int get_someint() const{
return someint;
}
要返回int
,但是矢量呢?
答案 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;
}