teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

注釈追加

2016/05/08 15:43

投稿

catsforepaw
catsforepaw

スコア5944

answer CHANGED
@@ -2,6 +2,7 @@
2
2
  raccyさんのように別の文字列に移し替えるようにすれば最小限のコピーで済みます。
3
3
 
4
4
  raccyさんとは別のやり方で作ってみました。文字列領域を若干多めに取ることになりますが、コピーは最小限だと思います。
5
+ ※reserveで領域サイズを決め打ちしているので、もしかしたら領域の節約になっているかもしれません。
5
6
 
6
7
  非C++11版
7
8
  ```C++

1

cbeginとcendはC\+\+11からなので訂正

2016/05/08 15:43

投稿

catsforepaw
catsforepaw

スコア5944

answer CHANGED
@@ -23,12 +23,12 @@
23
23
 
24
24
  std::string str;
25
25
  str.reserve(targetStr.length());
26
- auto iter = targetStr.cbegin();
26
+ auto iter = targetStr.begin();
27
- while(iter != targetStr.cend())
27
+ while(iter != targetStr.end())
28
28
  {
29
- auto iter2 = std::find_if(iter, targetStr.cend(), IfCrLf());
29
+ auto iter2 = std::find_if(iter, targetStr.end(), IfCrLf());
30
30
  str.append(iter, iter2);
31
- iter = std::find_if(iter2, targetStr.cend(), IfNotCrLf());
31
+ iter = std::find_if(iter2, targetStr.end(), IfNotCrLf());
32
32
  }
33
33
  targetStr.swap(str);
34
34
  ```