I'ld喜歡以創建經過不通過參考一個std :: string要修改的功能,傳遞的std :: string的陣列通過引用
void changeStr(std::string &str)
{
str = "Hello World!";
}
,而是整個,固定std :: strings的大小數組(該函數將完全相同:將一些特定的字符串指定給數組中的每個空間)。但我不知道哪個是合適的語法...
I'ld喜歡以創建經過不通過參考一個std :: string要修改的功能,傳遞的std :: string的陣列通過引用
void changeStr(std::string &str)
{
str = "Hello World!";
}
,而是整個,固定std :: strings的大小數組(該函數將完全相同:將一些特定的字符串指定給數組中的每個空間)。但我不知道哪個是合適的語法...
以下是操作方法!
//Change the 10 to whatever size you'd like
void changeStr(std::string (&str)[10]) {
}
這當然是一個靜態的大小,其他的答案,但是,是更好方法完成你需要的靈活性是什麼。
一種方法是將參考傳遞給std::array<std::string, N>
,其中N
是數組的大小。您可以使用函數模板來推斷N
:
#include <array>
template <size_t N>
void changeStr(std::array<std::string, N>& strings)
{
// access strings[i] for i >= 0 and i < N
}
或者,您也可以通過固定尺寸的普通陣列,再次使用函數模板:
template<size_t N >
void changeStr(std::string (&strings)[N])
{
// access strings[i] for i >= 0 and i < N
}
注意,模板是必要在這裏允許函數來處理不同大小的固定大小的數組。該模板允許您保留尺寸信息,而不必擔心它的實際價值。
[模板是沒有必要的](http://coliru.stacked-crooked.com/view?id=fc95cd562800c051b92d067de4b3444c-76514b8f9424a3be7ad7d477f762fdd0) –
@MooingDuck ehm,什麼?怎麼沒有必要? – juanchopanza
這不是必須的,因爲'std :: string [10]'的_reference_不會衰減到指針。看看我的代碼在哪裏編譯並且不允許傳入一個'std :: string [3]'。 –
由於您使用的是C++,因此您可能希望通過引用傳遞值的集合,而不是通過引用引用集合。實現這一目標的最簡單方法是使用std::vector<T>
void changeStr(std::vector<std::string>& collection) {
if (collection.size() > 0) {
collection[0] = "hello world";
}
}
void changeStr(std::string pStrings[], int num)
可以傳遞任何尺寸的任何C數組。如果changeStr函數需要知道大小,則需要將其作爲大小參數傳遞。 請注意,我個人更喜歡使用矢量。
其實這就是我需要的。我同意,考慮到靈活性,其他方法更好,但我正在考慮預先固定大小的陣列,所以您的答案最終是最簡單和最好的。謝謝! (並感謝其他人!) – Momergil
我很高興能幫上忙! –