我有一些A类对象的向量:

 std::vector<A> *V1;
 std::vector<A> *V2;

有一个带有A:

指针向量的函数
 std::vector<A *> *arranged;

我需要做的是将V1,V2等中的向量排列在最后,而不是最终破坏它们,所以我认为这些对象的指针向量......这可能吗? 如果是的话,你能给我一个带变量V1的迭代的例子,并将这些对象的指针添加到排列中吗?

想象一下,你暂时需要将3个对象向量分类到一个向量中,但你不想弄乱3个向量的记忆。

TY,

有帮助吗?

解决方案

您可以编写自己的比较器。在这种情况下,比较器将在 A * 上工作。使用 int 类型的简单示例:

void fun(vector<int*>* vec)
{
  /////////
}

bool comp(int* lhs, int* rhs)
{
    return *lhs < *rhs;
}

int main()
{
    vector<int> first, second;
    vector<int*> vec;

    for(vector<int>::size_type i = 0; i < first.size(); ++i)
        vec.push_back(&first[i]);
    for(vector<int>::size_type i = 0; i < second.size(); ++i)
        vec.push_back(&second[i]);

    // write your own comparator! provided above: comp
    sort(vec.begin(), vec.end(), comp);

    fun(&vec);

    return 0;
}

其他提示

如果我理解正确 - 你有几个包含一些对象类型(A)的向量,并且你想要创建一个新的向量,其中包含其他向量的所有成员的组合,而不是实际复制周围的对象,或者否则以任何方式扰乱他们的拥有载体?

首先:新的复合载体的生命是否确实存在,以至于它的源向量都不会改变?也就是说:如果这些指针在复合材料的生命周期内无效,那么您不能只使用复合向量中的源向量的原始指针。

如果对此的答案不是“明确的话,那么指针将保持有效”。那么你需要考虑使用共享指针或类似的东西,这样改变源向量不会使你的复合向量处于无效状态(即不要让它指向随机存储器)。

假设源向量在复合的生命周期内就其自身内容而言保持不变,那么简单的答案是“是”

vector<A> source1;
vector<A> source2;
vector<A> source3;

vector<const A*> composite; // this is a sorted vector of the above vectors' contents (by pointer)

对于复合向量,您需要将source1-3的内容(通过副本)放入其中,然后对其进行排序(或者您可以使用已排序的容器,并在插入元素时进行排序)。您需要定义自己的排序运算符,该运算符取消引用指针并对目标对象本身应用任何排序算法。

这对你有帮助吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top