c ++:函数返回的print字符串向量

时间:2014-10-19 16:30:10

标签: c++ vector cout

基本上我在std::vector<std::string> alloc中有一个私有class A,它通过公共方法std::vector<std::string> allocMethod()对其进行了一些操作等,然后这个方法执行return alloc。该方法在class B

中调用

class B中,我想打印allocMethod的返回值,即alloc向量。这就是我所拥有的

std::cout << A.allocMethod();

我知道通常会使用某种interator和loop来打印出一个向量,但我不认为我可以这样做,因为它是一个函数返回值,而不是实际上是一个向量。

注意:我真的不想在class A中打印出矢量。

有没有办法输出如上所示的std::vector<string>结果?

3 个答案:

答案 0 :(得分:2)

与你的相信相反,你可以通过迭代来打印向量,尽管它是一个临时的使用C ++ 11 for-loop,如下所示:

for (const auto& i : A.allocMethod())
    std::cout << i << '\n';

答案 1 :(得分:2)

  

“注意:我真的不想在A级打印出矢量。”

如果你想反复使用它,为std::vector<std::string>提供适当的输出操作符重载可能是值得的

std::ostream& operator<<(std::ostream& os,const std::vector<std::string>>& vs) {
    for (const auto& s : vs) {
        os << s << " ";
    }
    return os;
}

这应该只允许调用

std::cout << A.allocMethod();

您甚至可以尝试更通用的重载

template<typename T>
std::ostream& operator<<(std::ostream& os,const std::vector<T>>& vs) {
    for (const auto& s : vs) {
        os << s << " ";
    }
    return os;
}

答案 2 :(得分:0)

您可以存储返回值,然后迭代它。像这样:

std::vector<std::string> result = allocMethod();
for (std::size_t i = 0; i < result.size(); ++i)
{
    std::cout << result[i];
}