在C++中,你不會使用數組(int[]
或int*
)來的,因爲他們在幾個方面都討厭:你必須通過SIZE
各地,他們通常異常不安全(你必須捕獲異常,刪除數組,然後重新拋出異常),並且很難正確使用它作爲類成員。使用標準庫容器或迭代器範圍。
慣用的方式做你想要做的是使用迭代器和對什麼:
template <typename IT_1, typename IT_2>
std::pair<int,int> getChange(IT1 begin, IT1 end, IT2 begin2)
{
for (; begin != end; ++begin, ++begin2)
{
if (*begin != *begin2) return std::make_pair(*begin,*begin2);
}
return std::make_pair(0,0);
}
void main() {
int myNumbers[] = {1, 0, 2, 3};
int possibilities[] = {0, 1, 2, 3};
std::pair<int,int> change = getChange(possibilities, possibilities + 4,
myNumbers);
printf("%i/%i\n", change.first, change.second);
}
注意,第二序列(通過myNumbers)預計爲至少只要是作爲第一序列。如果你與迭代器和函數模板不舒服的是,你可以隨時使用向量來代替:
std::pair<int,int> getChange(std::vector<int> a, std::vector<int> b) {
for (int i = 0; i < a.size() && i < b.size(); ++i)
{
if (a[i] != b[i]) return std::make_pair(a[i],b[i]);
}
return std::make_pair(0,0);
}
void main() {
int _myNumbers[] = {1, 0, 2, 3};
int _possibilities[] = {0, 1, 2, 3};
std::vector<int> myNumbers(_myNumbers,_myNuymbers+4),
possibilities(_possibilities,_possibilities+4);
std::pair<int,int> change = getChange(possibilities, myNumbers);
printf("%i/%i\n", change.first, change.second);
}
而後者似乎而非陣列版本更詳細的(畢竟,它創建兩個數組,然後複製將它們的值寫入向量中),請記住從一個常量初始化一個數組是非常罕見的事情:大多數情況下,數組(和向量)是由一段代碼專門用於動態初始化的。這樣的代碼通常可以用於數組和矢量,只需很少的更改。
而且,當然,如果您最終使用它們的話,您可以將typedef
均設爲std::pair<int,int>
和std::vector<int>
更短的名稱。
我建議你得到一個基本的C++書籍,因爲這是錯誤的如此多的水平。 – Puppy 2011-01-25 13:04:33
你知道你在'if'測試之外有'break'聲明嗎?你只能通過for循環一次。我認爲它想進入'if'測試,所以你打破了第一個區別。 – Chowlett 2011-01-25 13:05:31
你*有*使用數組還是這是一個學習練習? – Tony 2011-01-25 13:06:01