使用字符串**创建地图。我想我走错了路
Map creation with string**. I guess I'm on the wrong way
我来找你是因为我是C++初学者,用C编程,当我必须创建地图时,我有点迷茫。
事实上,当我想从程序参数创建映射时,我习惯于操作 char**。这就是我想要创建的地图类型:
*******
* *
* *
*******
如果是在 C 中,我会这样做:字符**地图;
map = malloc(sizeof(char*) * sizeY);
while (i < sizeY)
{
map[i] = malloc(sizeof(char**) * sizeX);
++i;
}
但是,我在 c++ 中,我正在尝试使用字符串。这就是问题所在,我不能像字符**那样操纵它。
我唯一能编译的是:
_map = new std::string*;
for (int i = 0; i < sizeY; ++i)
{
_map[i] = new std::string[sizeY * sizeX];
}
但是,当然,当我尝试完整地图时,这无法正常工作。
有人可以帮助我或引导我做某事吗?
提前谢谢你:)
在C++中,标准库为我们提供了管理动态数组的类:
#include <vector>
#include <string>
std::vector<std::string> map(sizeY, std::string(sizeX, ' '));
如果你想练习杂耍指针,那么你会想要更像的东西
std::string * map = new std::string[sizeY];
for (int i = 0; i < sizeY; ++i) {
map[i].resize(sizeX);
}
// don't forget to delete it when you've finished
delete [] map;
当您了解异常安全的概念时,您将了解为什么这是一个坏主意;您应该始终使用 RAII 类(如 std::vector
)来管理动态资源。
这样做:
vector <string> map;
cin>>size;
map.resize(size);
请参阅矢量和字符串。
附带说明一下,在 C 中它将是
map[i] = malloc(sizeof(char) * sizeX);
不
map[i] = malloc(sizeof(char**) * sizeX);
我不建议使用交错数组。而是使用例如std::vector
将地图存储在连续内存中。您可以编写一个类来将所有与地图相关的代码保存在一个位置。
class Map
{
Map(int rows, int cols)
: rows_(rows), cols_(cols), cells_(rows*cols,' ') {}
char& operator()(int r, int c) {
return cells_[index(r,c)];
}
size_t index(int r, int c) const {
return r*cols_ + c;
}
private:
int rows_, cols_;
vector<char> cells_;
};
用法:
Map map(4,7);
map(0,0) = '*';
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 首要问题的答案让值班员搞错了
- 看起来is_nothrow_constructible_v()在MSVC中被破坏了,我错了吗
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 我的C++线程做错了什么?
- 如何正确使用 >=?(a+f()+c)>=0 错了吗?
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 指针相关的UE4崩溃.我的指针哪里错了?
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- FFMPEG,C++,内存泄漏,我做错了什么?
- 我做错了什么?反向字符串 C++
- 我在这个课上做错了什么?
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- c++地图值不改变运行时,我做错了什么
- 使用字符串**创建地图。我想我走错了路