标签: inserter

STL堆栈和priority_queue的插入器

std::vector,std::list并且std::dequestd::back_inserterstd::setstd::inserter.

对于std::stackstd::priority_queue我会假设等效的插入器将是一个,push()但我似乎无法找到正确的函数来调用.

我的意图是能够使用以下函数和正确的插入迭代器:

#include <string>
#include <queue>
#include <iterator>

template<typename outiter>
void foo(outiter oitr)
{
   static const std::string s1 ("abcdefghji");
   static const std::string s2 ("1234567890");
   *oitr++ = s1;
   *oitr++ = s2;
}

int main()
{
   std::priority_queue<std::string> spq;
   std::stack<std::string> stk;

   foo(std::inserter(spq));
   foo(std::inserter(stk));

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ containers stl priority-queue inserter

11
推荐指数
2
解决办法
1240
查看次数

Traits类从back_insert_iterator中提取容器的value_type

std::back_insert_iterator具有value_type等于void,但它也有一个protected构件container,其保持指针到底层Container.我试图写一个traits类来提取容器value_type,沿着这些方向:

#include <iterator>
#include <type_traits>
#include <vector>

template<class OutputIt>
struct outit_vt
:
    OutputIt
{
    using self_type = outit_vt<OutputIt>;
    using value_type = typename std::remove_pointer_t<decltype(std::declval<self_type>().container)>::value_type;
};

int main()
{
    std::vector<int> v;
    auto it = std::back_inserter(v);
    static_assert(std::is_same<outit_vt<decltype(it)>::value_type, int>::value, "");
}
Run Code Online (Sandbox Code Playgroud)

实例

但是,这(或多或少地预期)会遇到不完整的类型错误.反正这是为了得到容器的提取物value_type吗?

c++ iterator value-type type-traits inserter

6
推荐指数
1
解决办法
866
查看次数

使用 back_inserter() 或 inserter() 提高 std::copy() 的效率

back_inserter非常insert_iterator方便,但效率也很低!

例如,当您追加chars 时,每个元素都会产生大量开销copy,而在许多情况下,实际上并不需要如此。

有没有办法让他们更有效率?

c++ inserter

6
推荐指数
1
解决办法
4710
查看次数

std :: inserter无法正常工作

我正在编写一个代码,其中一个文件使用set_intersection函数,该函数的最后一个参数应该是一个插入器.但是当我编译代码时,我看到以下错误:

error C2039: 'inserter' : is not a member of 'std'
error C2873: 'inserter' : symbol cannot be used in a using-declaration
error C3861: 'inserter': identifier not found
Run Code Online (Sandbox Code Playgroud)

以下是使用set_intersection函数的文件中的代码

#include "Query.h"
#include "TextQuery.h"
#include <set>
#include <algorithm>
#include <iostream>

using std::set;
using std::ostream;
using std::inserter; 
using std::set_intersection;

// returns intersection of its operands' result sets
set<TextQuery::line_no>
AndQuery::eval(const TextQuery& file) const
{
    // virtual calls through the Query handle to get result sets for the operands
    set<line_no> left = lhs.eval(file), 
                 right …
Run Code Online (Sandbox Code Playgroud)

c++ inserter

4
推荐指数
2
解决办法
6287
查看次数

插入迭代器与容器的成员函数插入器

我一直在学习STL在过去的两个星期,一直在处理很多的vector<T>,deque<T>list<T>.我一直在使用所有这些时间push_back(),push_front(),insert().目前,我已经介绍了"插入迭代器",其中包括:

  • back_insert_iterator,类似于push_back()并且确实要求容器具有push_back()工作功能
  • front_insert_iterator,类似于push_front()并要求容器具有push_front()
  • insert_iterator,类似的insert(),等等等等等等

所以我知道如何实现这一切.我的问题很简单,有什么区别?为什么要使用Insert Iterators呢?

c++ iterator stl inserter

3
推荐指数
1
解决办法
211
查看次数

如何使用ifstream将任何自定义数据类型写入文件?

问题说,我想在c ++中使用ifstream将类的自定义数据类型数据写入文件.需要帮忙.

c++ fstream iostream inserter

1
推荐指数
1
解决办法
2079
查看次数