C++ 将元素从一个 vector 移动到另一个 vector

标签 c++ c++11 vector reference

我仍在学习 C++ 的基础知识。

我想将一个 vector 的某些元素移动到另一个 vector (基于该 vector 是否包含在 unordered_set 中)。

但是,我不断收到错误消息,指出 vector 类没有采用引用变量的插入方法。具体来说,这个错误:

In file included from TorrentTrackerCommManager.h:10:0,
                 from TorrentTrackerCommManager.cpp:1:
PeerList.h: In member function ‘void PeerList::addPeers(std::vector<Peer*>)’:
PeerList.h:51:24: error: no matching function for call to ‘std::vector<Peer>::insert(Peer&)’
      peerList.insert(*p);

我使用的代码在这里:

class PeerList {

    private:

        /* List holding all of the Peer objects. */
        std::vector<Peer> peerList;

        /* Set holding all of the Peer objects. */
        std::unordered_set<Peer, PeerHash> peerSet;

    public:

         void addPeers(std::vector<Peer *> newPeers) {

            std::vector<Peer *>::iterator it;
            for (it = newPeers.begin(); it != newPeers.end(); ++it) {

                Peer p = **it;

                //If we don't already have that peer
                if (peerSet.find(p) != peerSet.end()) {

                    //add him
                    peerList.insert(p);
                    peerSet.insert(p);
                }
            }
        }
  }

最佳答案

std::vector<...>确实有一个 insert()方法。实际上,它有多个重载 insert()方法,但它们都采用迭代器指示插入传递值的位置。如果可以将值附加到末尾,则可以使用 push_back() :

peerList.push_back(p);

关于C++ 将元素从一个 vector 移动到另一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670409/

相关文章:

c++ - 手动调用 OpenGL 函数

c++ - 为什么 cout<<main;打印 1?

c++ - 如何修复此错误(将 wchar_t 转换为 BSTR)?

multithreading - 为什么这不编译? (RValue 作为线程 CTOR 参数)

c++ - 类型特征以识别可以以二进制形式读/写的类型

c++ - 从live555入手,集成LIBMAD解码器

c++ - 在c++中的 vector 中推回多种类型的数据

r - 通过非 NA 值合并两个向量

c++ - 如何将数据从 C++ 数组复制到特征矩阵或 vector ?

c++ - 我可以使用std::array的自定义分配器来获得安全的加密 key 吗?