2

我正在为学校做一个项目,但遇到了一些问题(标题中有错误)。

这是遇到错误的代码行:

kruskalS[n].nodeList[m].push_back(tempFirstCity);

kruskalS是一个结构,nodeList是结构内的一个类型向量,string我正在尝试将tempFirstCity(也是 a string)插入到该数组中。

我很容易犯一个基本错误,因为自四月以来我没有做过任何编程。任何形式的帮助都将不胜感激,如果需要,我愿意从该程序中发布更多信息。

4

4 回答 4

6

Astd::string是(某种意义上)chars 的容器。push_back函数用于将一个元素添加到容器的末尾。因此,当您调用时kruskalS[n].nodeList[m].push_back(tempFirstCity);,您说您正在尝试将一个元素添加到被string调用的末尾kruskalS[n].nodeList[m]。所以编译器期望一个元素是一个char.

如果您知道那tempFirstCity不是空的并且您想将第一个charfrom添加tempFirstCity到末尾kruskalS[n].nodeList[m](包括您知道的情况tempFirstCity.size() == 1),您可以这样做

kruskalS[n].nodeList[m].push_back(tempFirstCity[0]);

如果你想在任何当前内容之后添加整个字符串,你可以这样做

kruskalS[n].nodeList[m] += tempFirstCity;

如果您希望没有当前内容和/或您只想用tempFirstCity字符串替换已经存在的任何内容,您可以这样做

kruskalS[n].nodeList[m] = tempFirstCity;
于 2012-12-01T05:27:09.907 回答
5

您可以使用:

std::string::c_str()

它返回一个const char *.

于 2012-12-01T04:58:23.250 回答
1

你说 nodeList 是一个字符串类型的数组。即std::string nodeList[x]其中 x 是一个常数。

然后为该数组分配一个新元素,其中 m < x 如下:

kruskalS[n].nodeList[m] = tempFirstCity;


根据评论:

要附加到向量的末尾,您不需要索引 m:

kruskalS[n].nodeList.push_back(tempFirstCity);

在索引 m 处插入:

vector<string>::iterator itr = nodeList.begin();
for (int i = 0; i < m; i++)
  itr++;
nodeList.insert(itr, tempFirstCity);
于 2012-12-01T05:37:08.123 回答
-2

在 C++ 中,您可以使用string::c_str()将字符串转换为 C 编程char数组。

于 2012-12-01T04:59:15.280 回答