在C++函数中返回字符串数组

sn0*_*0ep 19 c++ arrays string function

我是C++的新手.对于学校项目,我需要创建一个能够返回字符串数组的函数.

目前我的标题中有这个:

config.h中

string[] getVehicles(void);
Run Code Online (Sandbox Code Playgroud)

Config.cpp

string[] Config::getVehicles(){
string test[5];
test[0] = "test0";
test[1] = "test1";
test[2] = "test2";
test[3] = "test3";
test[4] = "test4";

return test;}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但这是我想要做的事情的想法.在Java中,这将是实现它的方法.我试过谷歌搜索我的问题,但我没有遇到任何明确的说实话的答案.

Gre*_*per 27

在这种情况下使用矢量可能更好,但这不是问题的正确答案.它不起作用的原因是变量测试只存在于函数的范围内.所以你必须自己管理内存.这是一个例子:

string* getNames() {
 string* names = new string[3];
 names[0] = "Simon";
 names[1] = "Peter";
 names[2] = "Dave"; 

 return names;
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将返回堆中位置的指针.堆中的所有内存都必须手动释放.所以现在你的工作是删除内存,如果你不再需要它:

delete[] names;
Run Code Online (Sandbox Code Playgroud)

  • 现在,我如何找到返回数组的长度? (2认同)

650*_*502 12

在C++中,您不使用数组,而是使用std::vector实例.C++中的数组必须具有编译时固定长度,而std::vector实例可以在运行时更改其长度.

std::vector<std::string> Config::getVehicles()
{
    std::vector<std::string> test(5);
    test[0] = "test0";
    test[1] = "test1";
    test[2] = "test2";
    test[3] = "test3";
    test[4] = "test4";
    return test;
}
Run Code Online (Sandbox Code Playgroud)

std::vector 也可以动态增长,所以在C++程序中你会发现更多的东西

std::vector<std::string> Config::getVehicles()
{
    std::vector<std::string> test; // Empty on creation
    test.push_back("test0"); // Adds an element
    test.push_back("test1");
    test.push_back("test2");
    test.push_back("test3");
    test.push_back("test4");
    return test;
}
Run Code Online (Sandbox Code Playgroud)

动态分配数组在std::string技术上是可能的,但在C++ 中是一个糟糕的想法(例如C++不提供Java所具有的垃圾收集器).

如果你想用C++编程,那么就抓住一本好的C++书并阅读它以涵盖第一部分...用C++编写Java代码是灾难的一种方法,因为语言尽管有相似的表面相似性,但在许多方面却非常不同基本方式.


Mat*_*Mat 7

用一个std::vector<std::string>.处理比C式样阵列要容易得多.

#include <string>
#include <vector>

...

std::vector<std::string> Config::getVehicles()
{
  std::vector<std::string> data;
  data.push_back("hello");
  ...
  return data;
}
Run Code Online (Sandbox Code Playgroud)

查看标准库中的其他容器,它们几乎总是比C++中的普通数组更好的选择.

如果您的getVehicles方法没有更改Config对象的状态,请考虑将其设置为 const:

std::vector<std::string> Config::getVehicles() const { ... }
Run Code Online (Sandbox Code Playgroud)