用 C++ 定义了一个类,类内部定义了一个私有成员变量 vector,如何提供接口让用户能够访问这个变量这个 vector
用 C++ 定义了一个类,类内部定义了一个私有成员变量 vector,如何提供接口让用户能够访问这个变量这个 vector
|
Tony042Nov 20, 2020
1
用 get set 函数提供这个 vector 的引用或者拷贝就可以了
|
|
kilasuelikaNov 20, 2020 via Android
2
返回一个 const 引用。
class A{ public: const vector<int>& get_v(){ } } |
|
kilasuelikaNov 20, 2020
3
V2EX 没有删除功能?上一个没有写完。
返回一个 const 引用。 class A{ public: const vector<int>& get_v(){ } } |
|
kilasuelikaNov 20, 2020
4
返回一个 const 引用。
class A{ public: const vector<int>& get_v(){ return v; }; private: vector<int> v; }; |
|
5
@kilasuelika 貌似是可以的哈,返回引用也没有数据的拷贝的对吧,因为 vector<int> v; 数据量比较大,接口调用也比较频繁
|
|
kilasuelikaNov 20, 2020
6
@NeilZhy1 有没有数据复制,要看对方是怎么接收数据的。下面这个例子:
#include <iostream> #include<vector> class A { public: A():v(2,0) { std::cout << v.data() << " "; }; const std::vector<int>& get_v() { return v; }; private: std::vector<int> v; }; int main() { A a; auto v0 = a.get_v(); //不共享数据 auto& v0_r = a.get_v(); //共享数据 const std::vector<int>& v1 = a.get_v(); //共享数据 std::vector<int> v2 = a.get_v(); //不共享数据 std::cout <<v0.data()<<" "<<v0_r.data()<<" "<< v1.data() << " " << v2.data() << std::endl; }; 1. auto 关键字不考虑引用,默认是没有引用的,所以相当于用一个引用来构造一个新的 v0,所以没有共享数据,有复制。 2. a 与 v0_r, v1 是共享数据的,v0 和 v2 是新的变量,发生了数据复制。 |
|
lifetimepornNov 20, 2020
7
const vector GetVector() const
{ return YourVector; } |
|
8
@kilasuelika 了解啦,多谢
|
|
whi147Nov 20, 2020 via iPhone
9
还有友元函数也可以
|
|
whi147Nov 20, 2020 via iPhone
10
还可以新写个类进行拷贝构造,方法很多
|
|
whi147Nov 20, 2020 via iPhone
11
你要是想不进行拷贝就移动构造
|