如何通过四种方式访问C++ STL deque容器中的元素?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1409个文字,预计阅读时间需要6分钟。
通过STL deque容器一节,详细介绍了如何创建一个deque容器。本节将延续这一主题,讲解如何访问(直至修改)deque容器存储的元素。与array和vector容器一样,deque容器可以采用普通数组访问方式来查询存储的元素。
首先,创建一个deque容器的基本步骤如下:
cpp#include #include
int main() { std::deque myDeque; // 创建一个int类型的deque容器
// 向deque中添加元素 myDeque.push_back(10); myDeque.push_back(20); myDeque.push_back(30);
// 访问deque中的元素 for (size_t i=0; i return 0;} 在上面的代码中,我们创建了一个名为`myDeque`的deque容器,并使用`push_back`函数向其中添加了三个元素。然后,通过循环遍历deque容器,使用下标访问每个元素并打印出来。 与array和vector容器类似,deque容器的访问方式非常直观。你可以使用下标运算符`[]`来访问deque中的元素,也可以使用迭代器来遍历容器中的元素。 修改deque容器中元素的值也非常简单,只需使用下标运算符或迭代器即可: cppmyDeque[1]=100; // 修改索引为1的元素值为100 或者使用迭代器:
cppauto it=myDeque.begin();std::advance(it, 1); // 移动迭代器到索引为1的位置*it=100; // 修改迭代器指向的元素值为100
通过以上步骤,你可以轻松地创建、访问和修改deque容器中的元素。
通过《STL deque容器》一节,详细介绍了如何创建一个 deque 容器,本节继续讲解如何访问(甚至修改)deque 容器存储的元素。和 array、vector 容器一样,可以采用普通数组访问存储元素的方式,访问 deque 容器中的元素,比如:
#include <iostream> #include <deque> using namespace std; int main() { deque<int>d{ 1,2,3,4 }; cout << d[1] << endl; //修改指定下标位置处的元素 d[1] = 5; cout << d[1] << endl; return 0; } 运行结果为:
2
5
容器名[n]的这种方式,不仅可以访问容器中的元素,还可以对其进行修改。但需要注意的是,使用此方法需确保下标 n 的值不会超过容器中存储元素的个数,否则会发生越界访问的错误。如果想有效地避免越界访问,可以使用 deque 模板类提供的 at() 成员函数,由于该函数会返回容器中指定位置处元素的引用形式,因此利用该函数的返回值,既可以访问指定位置处的元素,如果需要还可以对其进行修改。
不仅如此,at() 成员函数会自行判定访问位置是否越界,如果越界则抛出
std::out_of_range异常。例如:
#include <iostream> #include <deque> using namespace std; int main() { deque<int>d{ 1,2,3,4 }; cout << d.at(1) << endl; d.at(1) = 5; cout << d.at(1) << endl; //下面这条语句会抛出 out_of_range 异常 //cout << d.at(10) << endl; return 0; } 运行结果为:
2
5
读者可能有这样一个疑问,即为什么 deque 容器在重载 [] 运算符时,没有实现边界检查的功能呢?答案很简单,因为性能。如果每次访问元素,都去检查索引值,无疑会产生很多开销。当不存在越界访问的可能时,就能避免这种开销。
除此之外,deque 容器还提供了 2 个成员函数,即 front() 和 back(),它们分别返回 vector 容器中第一个和最后一个元素的引用,通过利用它们的返回值,可以访问(甚至修改)容器中的首尾元素。
举个例子:
#include <iostream> #include <deque> using namespace std; int main() { deque<int> d{ 1,2,3,4,5 }; cout << "deque 首元素为:" << d.front() << endl; cout << "deque 尾元素为:" << d.back() << endl; //修改首元素 d.front() = 10; cout << "deque 新的首元素为:" << d.front() << endl; //修改尾元素 d.back() = 20; cout << "deque 新的尾元素为:" << d.back() << endl; return 0; } 运行结果为:
deque 首元素为:1
deque 尾元素为:5
deque 新的首元素为:10
deque 新的尾元素为:20
注意,和 vector 容器不同,deque 容器没有提供 data() 成员函数,同时 deque 容器在存储元素时,也无法保证其会将元素存储在连续的内存空间中,因此尝试使用指针去访问 deque 容器中指定位置处的元素,是非常危险的。
另外,结合 deque 模板类中和迭代器相关的成员函数,可以实现遍历 deque 容器中指定区域元素的方法。例如:
#include <iostream> #include <deque> using namespace std; int main() { deque<int> d{ 1,2,3,4,5 }; //从元素 2 开始遍历 auto first = d.begin() + 1; //遍历至 5 结束(不包括 5) auto end = d.end() - 1; while (first < end) { cout << *first << " "; ++first; } return 0; } 运行结果为:
2 3 4
当然,deque 模板类中和迭代器相关的成员函数,还有很多,大家可以阅读《STL deque容器迭代器》做详细了解。
本文共计1409个文字,预计阅读时间需要6分钟。
通过STL deque容器一节,详细介绍了如何创建一个deque容器。本节将延续这一主题,讲解如何访问(直至修改)deque容器存储的元素。与array和vector容器一样,deque容器可以采用普通数组访问方式来查询存储的元素。
首先,创建一个deque容器的基本步骤如下:
cpp#include #include
int main() { std::deque myDeque; // 创建一个int类型的deque容器
// 向deque中添加元素 myDeque.push_back(10); myDeque.push_back(20); myDeque.push_back(30);
// 访问deque中的元素 for (size_t i=0; i return 0;} 在上面的代码中,我们创建了一个名为`myDeque`的deque容器,并使用`push_back`函数向其中添加了三个元素。然后,通过循环遍历deque容器,使用下标访问每个元素并打印出来。 与array和vector容器类似,deque容器的访问方式非常直观。你可以使用下标运算符`[]`来访问deque中的元素,也可以使用迭代器来遍历容器中的元素。 修改deque容器中元素的值也非常简单,只需使用下标运算符或迭代器即可: cppmyDeque[1]=100; // 修改索引为1的元素值为100 或者使用迭代器:
cppauto it=myDeque.begin();std::advance(it, 1); // 移动迭代器到索引为1的位置*it=100; // 修改迭代器指向的元素值为100
通过以上步骤,你可以轻松地创建、访问和修改deque容器中的元素。
通过《STL deque容器》一节,详细介绍了如何创建一个 deque 容器,本节继续讲解如何访问(甚至修改)deque 容器存储的元素。和 array、vector 容器一样,可以采用普通数组访问存储元素的方式,访问 deque 容器中的元素,比如:
#include <iostream> #include <deque> using namespace std; int main() { deque<int>d{ 1,2,3,4 }; cout << d[1] << endl; //修改指定下标位置处的元素 d[1] = 5; cout << d[1] << endl; return 0; } 运行结果为:
2
5
容器名[n]的这种方式,不仅可以访问容器中的元素,还可以对其进行修改。但需要注意的是,使用此方法需确保下标 n 的值不会超过容器中存储元素的个数,否则会发生越界访问的错误。如果想有效地避免越界访问,可以使用 deque 模板类提供的 at() 成员函数,由于该函数会返回容器中指定位置处元素的引用形式,因此利用该函数的返回值,既可以访问指定位置处的元素,如果需要还可以对其进行修改。
不仅如此,at() 成员函数会自行判定访问位置是否越界,如果越界则抛出
std::out_of_range异常。例如:
#include <iostream> #include <deque> using namespace std; int main() { deque<int>d{ 1,2,3,4 }; cout << d.at(1) << endl; d.at(1) = 5; cout << d.at(1) << endl; //下面这条语句会抛出 out_of_range 异常 //cout << d.at(10) << endl; return 0; } 运行结果为:
2
5
读者可能有这样一个疑问,即为什么 deque 容器在重载 [] 运算符时,没有实现边界检查的功能呢?答案很简单,因为性能。如果每次访问元素,都去检查索引值,无疑会产生很多开销。当不存在越界访问的可能时,就能避免这种开销。
除此之外,deque 容器还提供了 2 个成员函数,即 front() 和 back(),它们分别返回 vector 容器中第一个和最后一个元素的引用,通过利用它们的返回值,可以访问(甚至修改)容器中的首尾元素。
举个例子:
#include <iostream> #include <deque> using namespace std; int main() { deque<int> d{ 1,2,3,4,5 }; cout << "deque 首元素为:" << d.front() << endl; cout << "deque 尾元素为:" << d.back() << endl; //修改首元素 d.front() = 10; cout << "deque 新的首元素为:" << d.front() << endl; //修改尾元素 d.back() = 20; cout << "deque 新的尾元素为:" << d.back() << endl; return 0; } 运行结果为:
deque 首元素为:1
deque 尾元素为:5
deque 新的首元素为:10
deque 新的尾元素为:20
注意,和 vector 容器不同,deque 容器没有提供 data() 成员函数,同时 deque 容器在存储元素时,也无法保证其会将元素存储在连续的内存空间中,因此尝试使用指针去访问 deque 容器中指定位置处的元素,是非常危险的。
另外,结合 deque 模板类中和迭代器相关的成员函数,可以实现遍历 deque 容器中指定区域元素的方法。例如:
#include <iostream> #include <deque> using namespace std; int main() { deque<int> d{ 1,2,3,4,5 }; //从元素 2 开始遍历 auto first = d.begin() + 1; //遍历至 5 结束(不包括 5) auto end = d.end() - 1; while (first < end) { cout << *first << " "; ++first; } return 0; } 运行结果为:
2 3 4
当然,deque 模板类中和迭代器相关的成员函数,还有很多,大家可以阅读《STL deque容器迭代器》做详细了解。

