【问题标题】:I want to insert object with container list我想用容器列表插入对象
【发布时间】:2014-05-04 17:32:27
【问题描述】:

我想在某个索引上添加联系人,但我不知道为什么这段代码不起作用。

我对这条线有疑问:

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;
}

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

也许只有这两行有问题?还是整个代码都错了?如果是的话,如果有人能给我一个解决方案,我会很高兴。

【问题讨论】:

  • *it 是联系人类型,不是int
  • (*it);产生Contact 而不是int。要让索引使用单独的计数器。
  • 您可能希望在程序中使用 std::vector 而不是 std::list。这将使您的生活变得更加轻松,因为您想在容器中使用索引做一些事情。
  • 我必须用列表制作程序
  • 第一条评论说明了一切..

标签: c++ list containers


【解决方案1】:

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

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

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

std::list 类也没有下标运算符。所以这个说法

tmp.push_back(listOf[a]);

也是无效的,编译器会报错。

【讨论】:

  • 它解决了我的问题,但现在我在这一行得到了一个新的 if(a==index)。我收到此错误:'a == index'中的'operator=='不匹配
  • @user3127680 如果 a 没有 int 类型,例如有 Contact 类型,则这些类型的对象没有运算符 ==。 a的类型是什么?
  • 是联系人类型。如果它们不是同一类型,我现在如何检查插入位置?
  • @user3127680 我认为您不需要将整个结构与整数进行比较,而只需将结构的某些数据成员与该整数进行比较。例如 if (a.SomeDataMember == index)
【解决方案2】:

这里的问题是你期望列表和向量是一样的,并且可以互换使用。

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

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

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

tmp.push_back(*it);

【讨论】:

  • 它解决了我的问题,但现在我在这一行得到了一个新的 if(a==index)。我收到此错误:'a == index'中的'operator=='不匹配
  • @user3127680 那我猜你把a改成了Contact。你仍然需要它是一个整数,初始化为零并在循环中增加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2016-01-26
  • 1970-01-01
相关资源
最近更新 更多