C ++ prime第9章シーケンスコンテナのクラス後の回答(継続的な更新)

9.1

(a)リスト
(b)両端キュー、定数を絡ませない場合、リストは
(c)ベクトルにすることができます

9.2

list<deque<int>> ldi;

9.3

次の条件を満たすために、2つのイテレータが開始および終了してイテレータ範囲を形成します。

  • それらは、同じコンテナ内の要素、またはコンテナの最後の要素の後の位置を指します
  • beginを繰り返しインクリメントすることで、endに到達できます。つまり、endはbeginの前ではありません。

9.4

#include<iostream>
#include<vector>

using namespace std;

typedef vector<int>::iterator veci;
bool find(veci A, veci B, int c) {
    
    
	while(A != B) {
    
    
		if(*A == c) return true;
		++A;
	}
	return false;
}

int main()
{
    
    
	vector<int> vec = {
    
    9, 9, 8, 2, 4, 4, 3, 5, 3};
	for(int i = 0; i < 10; ++i) {
    
    
		if(find(vec.begin(), vec.end(), i)) cout << i << " is in vec.\n";
		else cout << i << " is not in vec\n";
	}
	return 0;
}

9.5

#include<iostream>
#include<vector>

using namespace std;

typedef vector<int>::iterator veci;
veci find(veci A, veci B, int c) {
    
    
	while(A != B) {
    
    
		if(*A == c) return A;
		++A;
	}
	return B;
}

int main()
{
    
    
	vector<int> vec = {
    
    9, 9, 8, 2, 4, 4, 3, 5, 3};
	for(int i = 0; i < 10; ++i) {
    
    
		auto it = find(vec.begin(), vec.end(), i);
		if(it == vec.end()) cout << i << " is not in vec.\n";
		else cout << *it << " is in vec\n";
	}
	return 0;
}

9.6

list<int> lst1;
list<int>::iterator iter1 = lst1.begin(), 
					iter2 = lst1.end();
while(iter1 < iter2) /* ... */

イテレータの算術演算子は、文字列、ベクトル、両端キュー、および配列のイテレータにのみ適用できます。
したがって、する必要があります

while(iter1 < iter2) 

着替える:

while(iter1 != iter2)

おすすめ

転載: blog.csdn.net/weixin_43900869/article/details/114989787