将句法分配到过载 =以初始化向量并添加值
Boost ASSIGN syntact to overload += to initialize vectors and add values
#include <iostream>
#include<vector>
using namespace std;
template <class T> class vector_inserter{
public:
std::vector<T> v;
vector_inserter(std::vector<T>& v):v(v){}
vector_inserter& operator,(const T& val){v.push_back(val);return *this;}
};
template <class T> vector_inserter<T> operator+=(std::vector<T>& v,const T& x)
{
return vector_inserter<T>(v),x;
}
int main()
{
vector_inserter<int> t+=1,2,3,
}
我在堆栈溢出中遇到了此代码,我仍在尝试了解它的工作原理,我尝试编译上述代码,但我会根据预期的initializer be =
获得错误有什么好方法可以使矢量操作过载操作员,例如{},(), =?
提升分配是我真正考虑过时的几个Boost的部分之一(请参阅哪些Boost功能与C 11重叠?)
首先,这是您已修复的代码的(多)一般版本:
活在coliru
#include <iostream>
#include <vector>
#include <list>
#include <map>
template <class C> struct inserter {
C& c;
template <typename T>
inserter& operator,(const T& val){ c.insert(c.end(), val); return *this; }
};
template <typename C, typename V = typename C::value_type> inserter<C> operator+=(C& c, const V& x) {
return inserter<C>{c}, x;
}
int main()
{
std::vector<int> t;
t += 1,2,3;
std::list<int> l;
l += 1,2,3;
std::map<int, std::string> m;
m += std::make_pair(1, "one"), std::make_pair(2, "two"), std::make_pair(3, "three");
}
请注意它如何用于其他类型。
这是您在/Just/C 11:
中编写类似内容的方式std::vector<int> t {4,5,6};
t.insert(t.end(), {1,2,3});
t.assign({1,2,3});
相关文章:
- 为什么我在向量初始化时收到此错误?
- 使用向量初始化参数化构造函数的对象数组
- C++向量初始化遗传算法的代理向量
- shared_ptr类的向量的向量初始化问题
- 如何实现使用 gcc-4.4 编译的大向量初始化?
- 使用向量初始化C++中的链表
- C++ 中的向量初始化
- 如何使用嵌套初始化构造函数中的一维向量初始化矩阵
- std::另一个函数中的向量初始化
- 理解向量初始化时出现问题
- 静态常量 std::<char>没有堆的向量初始化?
- 向量初始化在 C++ 类中失败
- 具有从特定范围的随机数初始化特征矩阵或向量初始化特征矩阵或向量的有效方法
- 关于向量初始化的一些问题
- 了解C 中的向量初始化
- 设置::使用数字中的引号进行向量初始化
- VS2010中的向量初始化
- C++:构造函数中的向量初始化
- 如何从向量初始化数组?(如何将指针强制转换为数组?)
- 给我一个向量初始化的提示或(答案)