C++ 恢复/传递一个向量(在标题中调用啥?)

Posted

技术标签:

【中文标题】C++ 恢复/传递一个向量(在标题中调用啥?)【英文标题】:C++ restore/pass a vector (what to call in the header?)C++ 恢复/传递一个向量(在标题中调用什么?) 【发布时间】:2015-01-21 20:46:49 【问题描述】:

我正在学校学习 C++,我正在为我的学校项目添加一些功能。我们需要编写一个程序,在文件夹中的文件中搜索单词。

现在我想列出所有目录和文件并将它们传回(返回),这样我就可以在控制台上显示(输出)它们。

所以我使用了一个向量类型的字符串并将我找到的所有路径推回...... 然后我想用 return 给(传递)它们,但我得到了错误:

error: cannot convert `std::vector<std::string, std::allocator<std::string> >' to `std::string*' in return

这是一些代码:

string OpenFolder(string path, const string constSearchedWord)


vector<string> vIndex;         //Vektor erzeugen
vector<string>::iterator i;    //Iterator (zum durchlaufen)

...

while ( 0 != ( dirEntry = readdir( dirHandle ) ) )
    
        string name = dirEntry->d_name;
        fullPath = path + '\\' + name;
        vIndex.push_back(fullPath);
    
    //Den Ordner schliessen
    closedir( dirHandle );

... 如果我想在这个函数中将它写入控制台:

for (i = vIndex.begin(); i < vIndex.end(); ++i)

    cout << static_cast<string>(*i) << endl;

工作很轻松,但我不想在这个函数中写到控制台中。

我想做

return vIndex;

我认为问题出在标题中:

string OpenFolder(string path, const string constSearchedWord)

我试过了

vector OpenFolder(string path, const string constSearchedWord)

但这也没有用。

我不知道在这里设置什么:

->???<- OpenFolder(string path, const string constSearchedWord)

【问题讨论】:

你肯定没学过C。C没有std::vector 顺便说一句,如果您返回的变量是 vector&lt;string&gt;,那么返回值也需要是 vector&lt;string&gt; 不是很明显吗? @The Paramagnetic Croissant 井,当然。我不知道,我怎么会忘记这个......但是谢谢 【参考方案1】:

更改函数OpenFolder的返回类型

string OpenFolder(string path, const string constSearchedWord)
~~~~~ should be std::vector < std::string >

还有,

对函数参数使用const 引用

std::vector<std::string> OpenFolder(const string& path,
                                    const string& constSearchedWord )

【讨论】:

抱歉,为什么是string&amp;,与string 的区别在哪里? @Sinmson 这是一个参考。如果您不认识该术语,请 Google 搜索“C++ 参考”。 @The Paramagnetic Croissant 好的,谢谢。我搜索了它,知道为什么这在理论上更好。但在实践中真的有区别吗? @Sinmson 有时有,有时没有。但这有关系吗?我怀疑。当这成为一个可衡量的瓶颈时,才考虑它。【参考方案2】:

如果你想从一个方法返回字符串向量,那么返回类型需要是一个字符串向量,即

std::vector&lt;std::string&gt; OpenFolder(string path, const string constSearchedWord)

【讨论】:

【参考方案3】:

函数定义/声明通常采用...的形式

[return type] [function name]([arguments])

如果您从OpenFolder 函数返回vIndex,则返回类型需要与vIndex 的类型相匹配,即vector&lt;string&gt;

【讨论】:

以上是关于C++ 恢复/传递一个向量(在标题中调用啥?)的主要内容,如果未能解决你的问题,请参考以下文章

C++:试图理解通过引用传递向量

将 C# 数组传递给 C++ 向量

通过引用函数传递向量,但更改不会持续

c++ 引用向量的问题?

用向量 c++ 中的指针成员初始化对象

c++ 在基类类型的向量中调用子类方法