0

構造Route.hを作成しました

#include "stdafx.h"
using namespace std;

struct Route {
    string startPoint;
    string endPoint;
    int number;
};

この構造を関数に渡す必要があります。私は参照を使用しました:

void CreateRoute(Route &route)
{
  int start = rand() % 10;
  int end = rand() % 10;

  if (start == end)
  {
    while(true)
    {
      end = rand()%10;
      if(end != start) break;
    }
  }

  route.startPoint = SetPoint(start);
  route.endPoint = SetPoint(end);
  route.number = SetNumber();
}

しかし、ポインタを使用する方が良い方法のようですが、ポインタを使用する方法がわかりませんか?

4

3 に答える 3

3

この場合、新しく構築されたオブジェクトを単純に返さないのはなぜでしょうか?

struct route
{
    std::string start_point;
    std::string end_point;
    int number;
};

route make_random_route()
{
    route r;

    int start = std::rand() % 10;
    int end = std::rand() % 10;

    while ( start == end) {
        end = std::rand() % 10;
    }

    r.start_point = make_point(start);
    r.end_point = make_point(end);
    r.number = make_number();

    return r;
}

それは些細なことであり、move ではコピーはありません。

于 2013-10-16T10:18:32.640 に答える
2

but it seems the using of pointers is the better way to do it

そもそも C++ に参照がある理由の 1 つは、ポインター、矢印、および多数の括弧を処理する手間を回避するためです。

ポインター型を使用するように簡単に変換できますが、ref 型は単純です。

void CreateRoute(Route* route);

あなたの宣言になり、それを次のように呼び出します

Route route;
CreateRoute(&route);
于 2013-10-16T10:02:27.437 に答える
1

C++ の基礎を改善する必要があると思います。以下は私の簡単な答えです。

void CreateRoute(Route *route)
{
if (route == NULL)
    return;

int start = rand()%10;
int end = rand()%10;

if (start == end)
{
    while(true)
    {
        end = rand()%10;
        if(end != start) break;
    }
}

route->startPoint = SetPoint(start);
route->endPoint = SetPoint(end);
route->number = SetNumber();
}
于 2013-10-16T10:05:14.547 に答える