如何使用operator<<
将string
推送到vector
。我搜索了很多,但只找到了流示例。
class CStringData
{
vector< string > myData;
// ...
// inline operator << ... ???
};
我希望将其用作简单的省略号(如void AddData(...)
)兑换
强大的参数。
CStringData abc;
abc << "Hello" << "World";
这有可能吗?
答案 0 :(得分:8)
您可以将operator<<
定义为:
class CStringData
{
vector< string > myData;
public:
CStringData & operator<<(std::string const &s)
{
myData.push_back(s);
return *this;
}
};
现在你可以这样写:
CStringData abc;
abc << "Hello" << "World"; //both string went to myData!
但我不建议将其作为会员功能,而是建议您friend
CStringData
:
class CStringData
{
vector< string > myData;
public:
friend CStringData & operator<<(CStringData &wrapper, std::string const &s);
};
//definition!
CStringData & operator<<(CStringData &wrapper, std::string const &s)
{
wrapper.myData.push_back(s);
return wrapper;
}
用法与以前相同!
要探索为什么你喜欢把它变成朋友以及规则是什么,请阅读:
答案 1 :(得分:1)
您需要使用 std::vector.push_back() 或 std::vector.insert() 在向量中插入元素。
答案 2 :(得分:0)
以下代码附加到流。相似的你也可以把它添加到矢量中。
class CustomAddFeature
{
std::ostringstream m_strm;
public:
template <class T>
CustomAddFeature &operator<<(const T &v)
{
m_strm << v;
return *this;
}
};
因为它是template
所以你也可以将它用于其他类型。
答案 3 :(得分:0)
// C++11
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string>& operator << (vector<string>& op, string s) {
op.push_back(move(s));
return op;
}
int main(int argc, char** argv) {
vector<string> v;
v << "one";
v << "two";
v << "three" << "four";
for (string& s : v) {
cout << s << "\n";
}
}