如果我想从函数返回一个字符串列表,我应该返回一个原始数组还是一个std :: vector?

时间:2016-02-18 18:02:56

标签: c++ arrays vector

我是一位经验不足的C ++程序员,我有点困惑。我有一个函数需要在运行时计算一些值并返回数组中的值。

我实际上是想要一个指向字符串数组的指针,我想返回那个指针(我的数组是全局的,因此从函数返回后它不会超出范围)。由于我事先并不知道值的数量,所以我不想初始化一个大数组。 (另外,这是一个不好的做法吗?我的老师告诉我,初始化像new int[512]这样的大小为512的数组并不好,但我不知道我怎么会为数组分配内存?)。我读了很多,似乎矢量是一个很好的解决方案,因为它们的大小可以在运行时增加或减少,每个人似乎都喜欢它们,但我从来没有使用过矢量。此外,我在其他地方使用字符串,我不想处理字符串转换的向量。

那么哪一个是好方法?

3 个答案:

答案 0 :(得分:1)

一般来说,在C ++中,返回std::vector字符串可能比指向数组的原始指针更好。 std::vector管理自己的内存,因此内存泄漏的可能性较低。 std::vector也知道它的大小,所以它更安全(否则,你怎么知道你返回了多少元素?)并且可以在基于范围的for循环中使用。最重要的是,std::vector还支持插入和删除,以便以后更容易转换。

答案 1 :(得分:1)

请阅读:

http://www.cplusplus.com/reference/vector/vector/

矢量更易于管理并提供更多功能。向量也清楚地表明您正在返回元素集合。指针并不总是一个数组,可能导致处理返回值时出错。如果您的内存系统较低并且需要管理您拥有的每个字节,则数组可能很好。

使用矢量,您只需迭代矢量即可获得所有结果。像这样:

std::vector<std::string> calculateSomethingFunction()
{
    std::vector<std::string> myresult;
    myresult.push_back("I am a string");
    return myresult;
}

void readResults(const std::vector<std::string>& results)
{
     std::vector<std::string>::iterator it = results.begin();
     for(; it != results.end(); ++it)
     {
        std::string currentResult = *it;
     }
}

答案 2 :(得分:-1)

您应该在函数中返回std:vector <std:string>以返回元素的副本。相反,您可以通过引用将std:vector<std:string>提供给函数,以便直接更改它。