我是一位经验不足的C ++程序员,我有点困惑。我有一个函数需要在运行时计算一些值并返回数组中的值。
我实际上是想要一个指向字符串数组的指针,我想返回那个指针(我的数组是全局的,因此从函数返回后它不会超出范围)。由于我事先并不知道值的数量,所以我不想初始化一个大数组。 (另外,这是一个不好的做法吗?我的老师告诉我,初始化像new int[512]
这样的大小为512的数组并不好,但我不知道我怎么会为数组分配内存?)。我读了很多,似乎矢量是一个很好的解决方案,因为它们的大小可以在运行时增加或减少,每个人似乎都喜欢它们,但我从来没有使用过矢量。此外,我在其他地方使用字符串,我不想处理字符串转换的向量。
那么哪一个是好方法?
答案 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>
提供给函数,以便直接更改它。