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

c++: print string vector returned by function

本文关键字:字符串 向量 返回 函数 打印 c++      更新时间:2023-10-16

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

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

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

我知道,通常情况下,人们会使用某种interator和循环来打印出一个向量,但我不认为我能做到这一点,因为它是一个正在打印的函数返回值,而实际上不是一个向量。

注意:我确实不想只打印出class A中的矢量。

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

"注意:我绝对不想只打印出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;
}

与您的想法相反,您可以通过迭代来打印矢量,尽管这是一个临时的使用C++11的循环,如下所示:

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

您只需存储返回值,然后对其进行迭代

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