14.使用迭代器编写程序,从标准输入设备读入若干string对象,并将它们存储在一个vector对象中,然后输出该vector对象中的所有元素。
// 11.15_9.14_vector_string.cpp : 定义控制台应用程序的入口点。 //
#include \#include #include #include using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { cout << \ << endl; vector strVec; string str; while ( cin >> str ) { strVec.push_back( str ); } cout << \; for ( vector::iterator it = strVec.begin(); it != strVec.end(); ++it ) { cout << *it << endl; } system(\); return 0; }
15.用list容器类型重写习题9.14得到的程序,列出改变了容器类型后要做的修改。 // 11.15_9.15_list_string.cpp : 定义控制台应用程序的入口点。 //
#include \#include
#include #include using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { cout << \ << endl; list strLst; string str; while ( cin >> str ) { strLst.push_back( str ); } cout << \; for ( list::iterator it = strLst.begin(); it != strLst.end(); ++it ) { cout << *it << endl; } system(\); return 0; }
16.int型的vector容器应该使用什么类型的索引? 使用 vector::size_type的索引。
17.读取存放string对象的list容器时,应该使用什么类型? 使用 list::iterator it, 进行索引,然后解引用 *it. 或者使用 list::const_iterator 类型的迭代器。 若想实现逆序读取,则可使用
list::reverse_iterator 和 list::const_reverse_iterator 迭代器。
18.编写程序将int型的list容器的所有元素复制到两个deque容器中。list容器的元素如果为偶数,则复制到一个deque容器中;如果为奇数,则复制到另一个deque容器里。 // 11.15_9.18_list_to_deque.cpp : 定义控制台应用程序的入口点。 //
#include \#include #include #include using namespace std;
int _tmain(int argc, _TCHAR* argv[]) { cout << \ << endl; list iLst; int iVal; while ( cin >> iVal ) { iLst.push_back( iVal ); } deque iOddDeque, iEvenDeque; for ( list::iterator it = iLst.begin(); it != iLst.end(); ++it ) { if ( *it % 2 == 0 ) { iEvenDeque.push_back( *it ); } else if ( *it % 2 == 1 ) { iOddDeque.push_back( *it ); } } cout << \ << endl; for ( deque::iterator it = iOddDeque.begin(); it != iOddDeque.end(); ++it ) { cout << *it << \ \; } cout << \ << endl; for ( deque::iterator it = iEvenDeque.begin(); it != iEvenDeque.end(); ++it ) { cout << *it << \ \;
}
}
system(\); return 0;
19.假设iv是一个int型的vector容器,下列程序存在什么错误?如何改正之。 vector::iterator mid = iv.begin() + iv.end()/2; while ( vector::iterator iter != mid ) if ( iter == some_val ) it.insert ( iter, 2 * some_val );
(1)当执行it.insert操作之后,迭代器 mid 就失效了,是因为 iv.end() 失效了。 (2)迭代器iter没有初始化;
(3)if语句中错误,因为 if ( *iter == some_val ) 可改为:
vector::iterator iter = iv.begin(); while ( iter != iv.begin() + iv.end() / 2 ) { if ( *iter == some_val ) { it.insert ( iter, 2 * some_val ); iter += 2; // important } else ++iter; }
20.编写程序判断一个vector容器所包含的元素是否与一个list容器的完全相同。 // 11.15_9.20_compare_list_and_vector.cpp : 定义控制台应用程序的入口点。 //
#include \#include #include #include using namespace std;