int m=0,n=0;
cin>>m>>n;
vector<vector<int> > map;//預設兩層陣列
/*兩個 ">>" 之間一定要隔開*/
//將資料讀入兩層陣列
//寫法 1
for (in t i = 0; i < m; i++)
{
vector<int> tmp(n, 0);// 宣 告一暫時的內層向量,n 為個數,0為預寫入資料
for (int j = 0; j < n; j++)//內層向量先將資料一排逐一讀入
cin >> tmp[j];
map.push_back(tmp);/ /再推入外層向量
}
//寫法 2
for(int i=0;i<m;i++)
{
vector<int> ma;// 宣告一暫時的內層向量
map.push_back(ma);//先推入外層向量
for(int j=0;j<n;j++)
{
int a=0;//宣告一整數
cin>>a;//讀入
map[i].push_back(a);//再進行推入向量
/*注意到該寫法,不再使用內層向量,而是使用外層向量的元素作指定*/
}
}
搥使題目驚坐起,笑問這題怎麼寫 可憐夜半虛前席,不問蒼天問教授 估狗仍舊不知曉,鍵盤滑鼠仍默矣 不為浮雲遮望眼,只緣身在最高層 大難臨頭往下推,小事一樁自己來 周遭都說很容易,四面楚歌要搞啥 甭要再問為什麼,因為說了你會怕
2018年5月15日 星期二
2018年3月18日 星期日
C++冷知識~~~while、括號與逗點
C++冷知識~~~
#include<iostream>
using namespace std;
int main()
{
int a,b;
a=1,2,3,4,5;//輸出第一個值, a=1;
b=(1,2,3,4,5);//輸出最後一個值, a=5;
cout<<a<<endl;
cout<<b<<endl;
int c[10]={1,2,3,4,5,6,7,8,9,0},b=10;
while(b --> 0)cout <<c[b]<<" ";//輸出0 9 8 7 6 5 4 3 2 1 ;
cout<<endl;
int d=10;
while(d --> 0)cout <<d<<" ";//輸出9 8 7 6 5 4 3 2 1 0;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a,b;
a=1,2,3,4,5;//輸出第一個值, a=1;
b=(1,2,3,4,5);//輸出最後一個值, a=5;
cout<<a<<endl;
cout<<b<<endl;
int c[10]={1,2,3,4,5,6,7,8,9,0},b=10;
while(b --> 0)cout <<c[b]<<" ";//輸出0 9 8 7 6 5 4 3 2 1 ;
cout<<endl;
int d=10;
while(d --> 0)cout <<d<<" ";//輸出9 8 7 6 5 4 3 2 1 0;
return 0;
}
2018年3月17日 星期六
C++曾經新手犯過的可執行錯誤
是否在剛學習宣告變數時,想要使用了那些懶人包( a=a+1 改成 a+=1 或 ++a );😙😙
但應用上輸出結果卻時常不如預期,不知道錯在哪裡;😕😖
誤打誤撞的對了,也就這樣了,對於同樣錯誤的隔壁;😓😒😑😐
兩兩互看、四目對望的也不知道錯在哪;😵😵
即便改對了,完全像作夢似的完全不記得夢境內容,說不出個所以然;😭😣😱
既是交不了作業覺得煩躁又覺得程式困難重重,大大的打擊信心(桑勳~~);😬💔💢💣
以下示範了這些懶人包(這些可執行的寫法),靜靜的思考一下,搞清楚;😤😤😤
弄懂了,搞不好在其他地方 ,也能運用呢,也可以自行執行看看喔~~!;😀😀😀
#include<iostream>
using namespace std;
int main()
{
int a = 1 , b = 0 ;
b=a++;//先執行 b=a 後 a++(即a=a+1),a=2 b=1
cout << a <<endl;// a=2
cout << b <<endl;// b=1
cout << a++ <<endl;//a會先傳回原來的2,但實際上a=a+1, a=3
a++;//a=a+1, a=4
cout << a++ <<endl;//a會先傳回原來的4,但實際上a=a+1, a=5
cout << +a <<endl;//無運算, 保持不變 a=5
cout << ++a <<endl;//a=a+1, a=6
b=++a;//b= (a=a+1), a=7 b=7
cout << a <<endl;//保持不變, a=7
cout << b <<endl;//保持不變, b=7
cout << ++b <<endl;//b=b+1, b=8
cout << b++ <<endl;//b會先傳回原來的7,但實際上b=b+1, b=8
++a;//a=a+1, a=8
cout << a <<endl;//保持不變, a=8
//👉💭 a++ 在運算子裡面的優先等級高於 ++a 喔~~~ 💭👈
cout << a++ + ++a << endl;
//a會先更新為 a++ 傳回的 8 (實際上a=a+1, a=9)加上
//實際的 a=9 (a=a+1, a=10), 故b=8+10, a=18
cout << a << endl;// a=10
cout << ++b + b++ << endl;
//雖然會先傳回 b=9(但之後繼續參與運算的是實際上的b=b+1, b=10)
//加上剛被前算式 b++ 更新的 b=10, b=10+10=20,然後再進行 ++b, b=b+1, b=21
cout << b << endl;// b=11
return 0;
}
但應用上輸出結果卻時常不如預期,不知道錯在哪裡;😕😖
誤打誤撞的對了,也就這樣了,對於同樣錯誤的隔壁;😓😒😑😐
兩兩互看、四目對望的也不知道錯在哪;😵😵
即便改對了,完全像作夢似的完全不記得夢境內容,說不出個所以然;😭😣😱
既是交不了作業覺得煩躁又覺得程式困難重重,大大的打擊信心(桑勳~~);😬💔💢💣
以下示範了這些懶人包(這些可執行的寫法),靜靜的思考一下,搞清楚;😤😤😤
弄懂了,搞不好在其他地方 ,也能運用呢,也可以自行執行看看喔~~!;😀😀😀
#include<iostream>
using namespace std;
int main()
{
int a = 1 , b = 0 ;
b=a++;//先執行 b=a 後 a++(即a=a+1),a=2 b=1
cout << a <<endl;// a=2
cout << b <<endl;// b=1
cout << a++ <<endl;//a會先傳回原來的2,但實際上a=a+1, a=3
a++;//a=a+1, a=4
cout << a++ <<endl;//a會先傳回原來的4,但實際上a=a+1, a=5
cout << +a <<endl;//無運算, 保持不變 a=5
cout << ++a <<endl;//a=a+1, a=6
b=++a;//b= (a=a+1), a=7 b=7
cout << a <<endl;//保持不變, a=7
cout << b <<endl;//保持不變, b=7
cout << ++b <<endl;//b=b+1, b=8
cout << b++ <<endl;//b會先傳回原來的7,但實際上b=b+1, b=8
++a;//a=a+1, a=8
cout << a <<endl;//保持不變, a=8
//👉💭 a++ 在運算子裡面的優先等級高於 ++a 喔~~~ 💭👈
cout << a++ + ++a << endl;
//a會先更新為 a++ 傳回的 8 (實際上a=a+1, a=9)加上
//實際的 a=9 (a=a+1, a=10), 故b=8+10, a=18
cout << a << endl;// a=10
cout << ++b + b++ << endl;
//雖然會先傳回 b=9(但之後繼續參與運算的是實際上的b=b+1, b=10)
//加上剛被前算式 b++ 更新的 b=10, b=10+10=20,然後再進行 ++b, b=b+1, b=21
cout << b << endl;// b=11
return 0;
}
2017年11月26日 星期日
兩值互換
在C++
int x=3,y=4;
x^=y^=x^=y;
會讓兩變數的值交換;
即x=4,y=3;
在Java
int x=3,y=4;
x^=y^=x^=y;
卻僅能一位換過去而已;
即x=4;
而另一個y呢?
卻會變成y=7;(咦?
int x=3,y=4;
x^=y^=x^=y;
會讓兩變數的值交換;
即x=4,y=3;
在Java
int x=3,y=4;
x^=y^=x^=y;
卻僅能一位換過去而已;
即x=4;
而另一個y呢?
卻會變成y=7;(咦?
這是基於兩者計算順序上的不同導致的結果~~
C++是整個"由右往左";......<=
Java是整個"由左往右";.....=>
C++是整個"由右往左";......<=
Java是整個"由左往右";.....=>
花點時間實際自己做一次,就會理解了~
註:
^=
是將兩數進行 XOR 運算(^);
並且將結果存到左方的變數(=);
^=
是將兩數進行 XOR 運算(^);
並且將結果存到左方的變數(=);
XOR
翻譯為"兩數在二進位下,逐一比對同位置的位元;
是否 \\不一樣\\ ;
另一解釋或記法為,[相同則0,相異則1];
翻譯為"兩數在二進位下,逐一比對同位置的位元;
是否 \\不一樣\\ ;
另一解釋或記法為,[相同則0,相異則1];
訂閱:
文章 (Atom)