使用运算符<<在向量中推送std :: strings

时间:2011-12-07 07:22:08

标签: c++ string stream overloading operator-keyword

如何使用operator<<string推送到vector。我搜索了很多,但只找到了流示例。

class CStringData
{

    vector< string > myData;
    // ...
    // inline  operator << ... ???
};

我希望将其用作简单的省略号(如void AddData(...))兑换 强大的参数。

CStringData abc;
abc << "Hello" << "World";

这有可能吗?

4 个答案:

答案 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";
    }
}