目的: 轉成大寫 輸入 : a bBb CccC 輸出 : A BBB CCCC 先不管輸出, 不知為何第 2 層 for() 編譯過不了 錯誤訊息是 : 二元運算子 '[' : 找不到使用右方運算元型別 'std::_Vector_iterator<_Myvec>' 的運算子 (或是沒有可接受的轉換) 抱歉. 因為縮排都會跑掉, 小弟只好上傳圖片了
模組化可以減少程式變的複雜,避免精力浪費在debug複雜的程式:把最小單位且有意義的功能獨立成一個函式: Toupper(string)然後 Toupper(vector<string> vString) 再去呼叫 Toupper(string)for (size_t i = 0; i < vString.size(); ++i){vString[i] = Toupper(vString[i]);}另外vector儘量直接以陣列的方式存取,除非必要,不必用iterator存取。</string>std::vector::operator[]https://www.cplusplus.com/reference/vector/vector/operator[]/reference operator[] (size_type n);const_reference operator[] (size_type n) const;vector operator [] 接受的參數是 size_type(整數?) 不是 iterator
請問為什麼 cout 那一行無法編譯成功 ?sarray[i] 不就是一個 string 嗎 :vector<string> ToUpper(vector<string> sarray){for (vector<string>::iterator i = sarray.begin() ; i != sarray.end() ; i++) {cout << sarray[i]; //編譯不過}}</string></string></string>
網路上看來的https://blog.csdn.net/sayln_wu/article/details/7919032其中一段:for (vector<int>::iterator iter=ivec.begin();iter!=ivec.end();iter++){i++;cout<< *iter <<endl; *iter="(*iter)+i;" }="" 請注意iterator的物件="" iter可以做的事情,iter就具備整數陣列="" 既然你已經用vector這個template="" class,就應該放棄c語言觀念中的array的觀念,="" array要自己管理注意index,但是使用這個vector="" 產生object只需要讓iterator來做事就可以了="" <="" b=""></endl;></int>
把 toupper(sarray[i][j]); 改成 touppper(*j);如果你要用陣列方式存取第一個元素,請用 array[0] = value如果你要用iterator存取第一個元素,請用 iterator it = array.begin(); *it = value使用 array[it] = value 是錯誤的