我想插入带有容器列表的对象

时间:2014-03-26 11:00:11

标签: c++ list containers

我想在某些索引上添加联系人,但我无法弄清楚为什么此代码无效。

我对这一行有疑问:

a = (*it);

和这一个:

tmp.push_back(listOf[a]);

这是代码:

void insert(list<Contact> &listOf, int index, const Contact &info) {

    list<Contact> tmp;
    int a;
    for(list<Contact>::iterator it = listOf.begin(); it != listOf.end(); it++)
    {
        a = (*it);
        if(a == index)
        {
            tmp.push_back(info);
            index -= 2;
            it--;
        }
        else
            tmp.push_back(listOf[a]);
    }
    listOf = tmp;
}

我有结构联系姓名和姓氏(字符串)。

这两行可能有问题吗?还是整个代码错了?如果是的话,如果有人能帮我解决,我会很高兴。

2 个答案:

答案 0 :(得分:1)

这里的问题是你希望列表与向量相同,并且可以互换使用。

首先,当您取消引用迭代器时,它会返回容器的类型,在您的情况下是Contact的实例。其次,您不能在std::list上使用类似数组的索引。

要解决第一个问题,您必须自己跟踪索引。

要解决第二个问题,您已经拥有了迭代器,可以在push_back调用中使用它:

tmp.push_back(*it);

答案 1 :(得分:1)

似乎类(或结构)Contact没有转换函数将Contact类型的对象转换为int类型的对象。所以这段代码无效

int a;
//,,,
    a = (*it);

因为表达式*it的类型是Contact而不是int。

std::list也没有下标运算符。所以这句话

tmp.push_back(listOf[a]);

也无效,编译器应发出错误。