2013-01-08 63 views
0

問題1:我想先刪除boost::filesyetem::path中的「file://」部分,而不先轉換爲std::string。是否可以使用boost::algorithm::replace_first算法來編寫此代碼?在boost :: filesystem :: path中使用boost :: algorithm

我試過以下,但它不能編譯。

std::string s("file://"), empty(""); 
boost::filesystem::path path = oldPath.generic_string(); 
boost::algorithm::replace_first(path.generic_string(), s, empty); 

編譯錯誤:

cannot convert parameter 2 from 'std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>' to 'std::_String_iterator<std::_String_val<std::_Simple_types<char>>>'  

問題2:boost::algorithm總比其他當應用於字符串有什麼用?

回答

1

A boost::filesystem::path而不是字符數組。您無法遍歷path中的字符,也不能假定所包含的字符串是任何特定的編碼。將path存儲爲std::vector<SomeStringType>是完全合法的,其中向量的每個元素都是路徑的元素。

簡而言之,path不是字符容器;這是一個特殊的對象。如果您需要存儲在字符容器中的路徑信息,則需要將其轉換爲這樣的容器。

+0

謝謝@NicolBolas。它非常有意義。你能回答問題的第二部分嗎? – hhbilly

+0

@ user1626720:這個問題定義得太差,無法回答。算法對於你使用它們的任何東西都很有用。然而,顧名思義,[*字符串算法*(這是'replace_first'的來源]](http://www.boost.org/doc/libs/1_52_0/doc/html/string_algo.html)主要用於字符串。 '路徑'不是字符串。 –

相關問題