使用指针 C++ [关闭] 指示 Vector 的索引
Posted
技术标签:
【中文标题】使用指针 C++ [关闭] 指示 Vector 的索引【英文标题】:Directing an index of Vector using a pointer, C++ [closed] 【发布时间】:2019-02-21 12:32:20 【问题描述】:出现一个错误,不允许我使用指针将 Vector 的索引移动到另一个函数。
仅供参考:vectorTest
已从包含单词和数字的文件中读取。
错误是下划线vectorData[0]
和状态
“不存在从 std::string 到 std::vector 的合适的用户定义转换”
这里是代码......
class dataInfo
private:
vector <int> idVector;
vector <string> houseVector;
vector <string> vectorData;
int idNumber;
string houseFirst;
public:
void testClasses(vector <string> vectorTest);
void allocateHouses(vector <string> vectorHouse);
;
void dataInfo::testClasses(vector <string> vectorTest)
vectorData = vectorTest;
dataInfo* testPointer = new dataInfo;
testPointer->allocateHouses(vectorData[0]); //ERROR IS HERE
void dataInfo::allocateHouses(vector <string> vectorHouse)
stringstream ss;
ss.str(vectorHouse);
while (ss >> idNumber >> houseFirst)
idVector.push_back(idNumber);
houseVector.push_back(houseFirst);
for (int i = 0; i < idVector.size(); i++)
cout << idVector[i] << " " << houseVector[i] << endl;
【问题讨论】:
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example。 什么是vectorData,它是如何声明的?我怀疑是std::vector<std::vector<something>>
您向我们提供了代码并省略了最关键的细节:vectorData 的声明。请修复您的代码示例
@Arkadiy 问题已解决。正在将向量的第一个元素传递给另一个向量字符串,而我只需要传递一个“std::string”。
【参考方案1】:
allocateHouse
需要 std::vector<std::string>
,但由于您通过 vectorData[0]
传递向量的第一个元素,因此您只传递了 std::string
。
我假设您只想在那里接受std::string
。
还有关于不必要的副本和不必要的new
使用的问题。
【讨论】:
谢谢,不需要的副本在哪里?修复似乎有效 如果您需要std::vector<...>
等参数,您实际上声明您将使用您自己的副本。这会导致调用者复制字符串(除非移动)。通常,您可以通过&
使用引用或通过const&
使用常量引用,以防您不更改传递的数据。所以在你的情况下void dataInfo::allocateHouses(string const& vectorHouse)
(其他方法也是如此)
@l3ck 刚刚了解了引用和取消引用。非常感谢分享的知识
不客气以上是关于使用指针 C++ [关闭] 指示 Vector 的索引的主要内容,如果未能解决你的问题,请参考以下文章
在没有向量、指针的情况下在 C++ 中在运行时增加数组大小 [关闭]