C++ FOR循环。之后后怎么return回去数组?

应该怎么ret回去啊,目前是放在成员变量pid里面,
刚接触c++不是很懂
我不想放在成员变量里面,想直接return回去


string* pid = new string[130];//这130要怎么设置,也许数组不止130、系统进程不止130个
 
string* start() {
    for (i = 0; i < cProcesses; i++)
    {
        if (aProcesses[i] != 0)
        {
          string* d=  PrintProcessNameAndID(aProcesses[i]);//取进程名,和进程pid
          if (d[0]=="undefined")
          {}
          else
          {
              pid[i] = d[0];
          }
        }
    }
 

好比php的for循环

    public $pid=array(“aaa”,“aaaa”,“aaaaa”);
    public function start(){
    for($i=0;$i<sizeof($pid);$i++){
        $tmp[]=$a[$i]
    }
    return $tmp
    }
阅读 1.5k
1 个回答

如果要直接 return 出去,返回类型应该是一个指针类型,或者准确点说是一个 const 指针类型。
但是这样 return 出去的指针得不到容量信息,也就是没得 size/length。

所以 C/C++ 一般会采用输出参数的方式来输出,比如

int test1(int** data) {
    int length = 10;
    int* buffer = new int[length];
    for (int i = 0; i < length; i++) {
        buffer[i] = i + i;
    }
    *data = buffer;
    return length;
}

test1 用指针的指针把指针带出来 C/c++ 适用。C++ 中也可以用引用来干这个事情。另外 size 也可以不用返回,用参数带出来:

void test3(int*& data, int& size) {
    int length = 8;
    int* buffer = new int[length];
    for (int i = 0; i < length; i++) {
        buffer[i] = i + i;
    }

    data = buffer;
    size = length;
}

或者干脆就用 std::vector 吧

vector<int>* test2() {
    vector<int>* data = new vector<int>();
    for (int i = 0; i < 10; i++) {
        data->push_back(i * 3);
    }
    return data;
}

用 for 遍历 vector

    vector<int>* d2 = test2();
    for (int i = 0; i < d2->size(); i++) {
        cout << (*d2)[i] << "  ";
    }
    cout << endl;

用 iterator 遍历

    for (vector<int>::iterator itr = d2->begin(); itr != d2->end(); itr++) {
        cout << (*itr) << "  ";
    }
    cout << endl;

如果是字符串的话,用 vector 大概可以这样写

#include<iostream>
#include<string>
#include<vector>

using namespace std;

vector<string> test1() {
    vector<string> data;
    for (int i = 0; i < 10; i++) {
        string s = "hello ";
        s.push_back('0' + i);
        data.push_back(s);
    }
    return data;
}

int main()
{
    vector<string> data = test1();
    cout << data.size() << endl;
    for (vector<string>::iterator iter = data.begin(); iter != data.end(); iter++) {
        cout << *iter << endl;
    }
}

但确实太没用写过 C++(有十多年了),而且最近几年 C++ 更新很快,所以不太清楚是否有更好的写法,以及这个写法是否存在内存问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题