Zmiana wartości tablicy 2D

0

Tworzę tablicę 2D za pomocą funkcji

MAP_GRID create_terrain(int size)

Próbuję teraz zmienić wartość jednej z jej komórek, za pomocą funkcji void set_position(MAP_GRID map, int x, int y, string object)

 Niestety, zmiana jest tylko tymczasowa. Poniżej zamieszczam pełny kod:

```cpp
#include "stdafx.h"
#include <iostream>
#include <vector>

using std::vector;
using std::string;
using MAP_GRID = vector<vector<string>>;

MAP_GRID create_terrain(int size)
{
	MAP_GRID map;

	for (int i = 0; i < size; ++i) {
		map.emplace_back(vector<string>());
		for (int j = 0; j < size; ++j) {
			map[i].emplace_back("[ ]");
		}
	}

	return map;
}

void print_terrain(MAP_GRID map)
{
	for (int i = 0; i < map.size(); ++i) {
		for (int j = 0; j < map[i].size(); ++j) {
			std::cout.width(4);
			std::cout << map[i][j].c_str();
		}
		std::cout << std::endl;
	}
}

void set_position(MAP_GRID map, int x, int y, string object)
{
	if (map[x][y] != "[ ]")
		std::cout << "\nPosition is occupied" << std::endl;
	map[x][y] = object; //temporary change
}
#include "stdafx.h"
#include <iostream>

using MAP_GRID = vector<vector<string>>;
using namespace std;

void print_terrain(MAP_GRID);
void set_position(MAP_GRID, int, int, string);
MAP_GRID create_terrain(int);

int _tmain(int argc, _TCHAR* argv[])
{
	MAP_GRID map = create_terrain(10);
	print_terrain(map);
	set_position(map, 5, 5, "[x]");
        return 0;
}
3

No to przekaż map przez referencję?

0

Próbowałem tak:
fafeb97ee6.png

W jaki sposób to przesłać?

1
void set_position(MAP_GRID, int, int, string);

Nie zapomniales czegos tu wstawic?

1

Okej.

  1. Funkcja:
void foo(int&);

to nie to samo co:

void foo(int);
  1. Majac funkcje:
void foo(int)

lub:

void foo(int&)

przekazujemy parametr tak:

int a;
foo(a);
  1. Przekazujac parametr tak:
int a;
foo(&a);

chcemy wywolac funkcje:

void foo(int*);

Widzisz roznice?

1

Nie prawda. Jak zrobisz poprawnie (czyli zrozumiesz to co napisalem) to nie bedzie zadnych bledow.

#include <iostream>
#include <vector>
 
using std::vector;
using std::string;
using MAP_GRID = vector<vector<string>>;
using namespace std;

void print_terrain(MAP_GRID);
void set_position(MAP_GRID&, int, int, string);
MAP_GRID create_terrain(int);
 
int main()
{
    MAP_GRID map = create_terrain(10);
    print_terrain(map);
    set_position(map, 5, 5, "[x]");
    cout << "\n\n";
    print_terrain(map);
    return 0;
}

 
MAP_GRID create_terrain(int size)
{
    MAP_GRID map;
 
    for (int i = 0; i < size; ++i) {
        map.emplace_back(vector<string>());
        for (int j = 0; j < size; ++j) {
            map[i].emplace_back("[ ]");
        }
    }
 
    return map;
}
 
void print_terrain(MAP_GRID map)
{
    for (int i = 0; i < map.size(); ++i) {
        for (int j = 0; j < map[i].size(); ++j) {
            std::cout.width(4);
            std::cout << map[i][j].c_str();
        }
        std::cout << std::endl;
    }
}
 
void set_position(MAP_GRID& map, int x, int y, string object)
{
    if (map[x][y] != "[ ]")
        std::cout << "\nPosition is occupied" << std::endl;
    map[x][y] = object; //temporary change
}

http://ideone.com/6sZUzU

1 użytkowników online, w tym zalogowanych: 0, gości: 1