2014-01-25 101 views
1

我以如下方式將字符串2d數組傳遞給函數。這是正確的還是可以做得更好?將字符串2d數組傳遞給函數

#include<iostream> 
#include<string> 
using namespace std; 

void print_name(string name[]) 
{ 
    cout<<name[0]; 
} 

int main() 
{ 
    string name[4]; 
    name[0] = "abc"; 
    name[1] ="xyz"; 
    name[2] = "pqr"; 
    name[3]= "xyq"; 

    print_name(name); 
    return 0; 
} 
+0

這樣比較好把它看作是一個字符串數組,而不是一個二維數組,即使一個字符串基本上是一個數組。 – Dani

+1

我在這裏沒有看到任何問題。也許最好在這裏使用'vector name(4)'。 – herohuyongtao

回答

2

在C++中更好的方法是通過一個std::vector作爲參數。

void print_name(const std::vector<std::string>& name) 

std::vector<std::string> name{"abc", "xyz","pqr","xyq"}; 

print_name(name); 
+0

'const'在這裏需要嗎?即使沒有'const',你也不能改變它,對嗎? – herohuyongtao

+0

@ herohuyongtao錯過了參考。 –

+0

爲什麼不簡單地'void print_name(vector name)'? – herohuyongtao

1

與通過C風格數組的問題是,您調用函數不知道它在哪裏結束。如果你必須使用一個固定大小的數組,更好的辦法是通過std::array<std::string,4>

void print_name(std::array<std::string,4>& names) ... 

如果使用std::vector<std::string>是可以接受的,它會給你的代碼更靈活:

void print_name(std::vector<std::string>& names) ... 

如果沒有上面的作品適合你,考慮將陣列物品的數量與陣列一起傳遞,以便你的print_name知道它可能得到的物品如何:

void print_name(std::string names[], int count) ... 
+0

嗯我認爲,你是正確的我應該使用矢量字符串... Thx很多爲您的迴應。 – user765443