gpt4 book ai didi

c++ - 创建一个引用另一个 vector 的某些元素的 vector

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:21 24 4
gpt4 key购买 nike

我已经存储了 class A 的实例在std:vector , vec_A作为vec_A.push_back(A(i)) .代码如下所示。

现在,我想存储对 class A 的一些实例的引用(在 vec_A 中)在另一个 vector 或另一个数组中。例如,如果 A.getNumber()返回 4, 7, 2 ,我想将一个 pointer 存储到另一个 vector 中的 A 实例,比如 std:vector<A*> filtered_A或数组。

有人可以教我怎么做吗??谢谢!

class A {
public:
int getNumber();
A(int val);
~A(){};
private:
int num;
};

A::A(int val){
num = val;
};

int A::getNumber(){
return num;
};

int main(){
int i =0;
int num;
std::vector<A> vec_A;
for ( i = 0; i < 10; i++){
vec_A.push_back(A(i));
}

std::cout << "\nPress RETURN to continue...";
std::cin.get();

return 0;
}

最佳答案

我认为最安全的做法是使用第二个 vector 将索引保存到第一个 vector 中:

using std::vector;
vector<A> main;
vector<vector<A>::size_type> secondary;

main.push_back(...);
secondary.push_back(main.size() - 1); // add the index of the last item

现在,要查找一个项目,您需要在次级中获取值并将其用于索引到主中:

main[secondary[...]];

我推荐这个而不是仅仅让辅助存储一个直接指针的原因是每次你添加到 vector 时它可能需要调整 vector 的大小这可能会使任何现有指针无效:

using std::vector;
vector<A> vec;
vec.push_back(A());

// get a pointer to the item you just added
A *p0 = &vec[0];

// add another item
a.push_back(A());

// because a push_back() can cause the vector to resize, p0 may no
// longer point to valid memory and cannot safely be dereferenced

关于c++ - 创建一个引用另一个 vector 的某些元素的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com