伊莉討論區

標題: 練習vector遇到的問題 [打印本頁]

作者: weirdococo    時間: 2017-4-22 09:06 PM     標題: 練習vector遇到的問題

最近在練習使用vector,
然後想要把vector當作一個大數字來用,像是{ 0x10, 0x00, 0x00, 0x00 }就是數字1000_0000,
在製作他的operator的時候遇到的不少問題,像是比大小,用perl來寫大概長這樣:
  1. my @listOne = (^10).roll(5);
  2. my @listTwo = (^10).roll(5);

  3. sub testTwoEquSizeArray( @one, @two ) {
  4.     for ( @one Z- @two  ) {
  5.       if ($_ > 0) {
  6.         return "one is bigger";
  7.       }
  8.       if ($_ < 0) {
  9.         return "two is bigger";
  10.       }
  11.     }
  12.     return "the same";
  13. }
  14. say &testTwoEquSizeArray(@listOne, @listTwo);
複製代碼

問題是在C語言裡面沒有ZIP functon、map、filter、reduce這類的東西,有沒有替代方法??


作者: ren1244    時間: 2017-4-23 10:26 AM

不知道您是否有C++的書?
感覺一些基本的東西好像需要看一下
也許看過之後,會比較清楚
因為雖然程式的邏輯相近,但是也是有一些特性上的不同
(例如迴圈)
  1. #include <vector>
  2. #include <iostream>

  3. int compare(const std::vector<int> &a,const std::vector<int> &b)
  4. {
  5.         int i;
  6.         if(a.size()!=b.size())
  7.                 return a.size()-b.size();
  8.         for(i=a.size()-1;i>=0 && a[i]==b[i];--i);
  9.         return i>=0?a[i]-b[i]:0;
  10. }

  11. int main()
  12. {
  13.         std::vector<int> one,two;
  14.         //init one and two here...
  15.         int cmp=compare(one,two);
  16.         std::cout<<(cmp!=0?(cmp>0?"one is bigger":"two is bigger"):"the same");
  17.         return 0;
  18. }
複製代碼

作者: weirdococo    時間: 2017-4-23 11:58 AM

本帖最後由 weirdococo 於 2017-4-23 01:19 PM 編輯
ren1244 發表於 2017-4-23 10:26 AM
不知道您是否有C++的書?
感覺一些基本的東西好像需要看一下
也許看過之後,會比較清楚

我竟然忘了基本的for迴圈,可能是我對基本的for迴圈太不熟悉,常用的語言都是Range-based for,所以腦袋轉不過來(其實外在寫C++也適用C11的Range-based for),沒有錯,基礎不好,所以我馬上去網路訂了一本 c++ primer plus,其實最主為的是我想程式的邏輯大都是ruby或是perl,然後再轉換成C++,不知道怎麼轉的去stack overflow查,這樣說學習不如說是使用,也不會了解C語言的精隨,是該好好的學一下C語言了!
作者: o_g349    時間: 2017-9-14 01:57 PM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://www65.eyny.com/) Powered by Discuz!