我想在某些索引上添加联系人,但我无法弄清楚为什么此代码无效。
我对这一行有疑问:
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;
}
我有结构联系姓名和姓氏(字符串)。
这两行可能有问题吗?还是整个代码错了?如果是的话,如果有人能帮我解决,我会很高兴。
答案 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]);
也无效,编译器应发出错误。