一、遍历vector容器
vector
是C++语言中的一个容器,用于存储一系列相同类型的元素。遍历vector
是使用vector
的一个基本操作。遍历vector
最常见的方式是使用迭代器,可以通过begin()
和end()
函数获取vector
的起始位置和结束位置。下面是一个遍历vector
容器的代码示例:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
for (auto it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
return 0;
}
以上代码中,我们使用了auto
关键字来定义迭代器,用于遍历vector
容器。通过循环,我们输出了每个元素的值,输出结果为:1 2 3 4 5
。
二、便利vector
除了使用迭代器来遍历vector
之外,还可以使用for-each
语句来遍历vector
。for-each
语句可以简化代码,并且更易读。下面是一个使用for-each
语句遍历vector
的代码示例:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
for (auto i : v) {
cout << i << " ";
}
return 0;
}
以上代码中,我们使用for-each
语句来便利vector
容器,输出结果与前一个示例相同。
三、遍历vector中的元素
遍历vector
中的元素是在遍历vector
的基础上,进一步操作vector
中的每个元素。对于vector
中的元素,在遍历的过程中可以使用下标或迭代器来进行操作。下面是一个使用下标遍历vector
并修改元素值的代码示例:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
for (unsigned int i = 0; i < v.size(); i++) {
v[i] *= 2;
}
for (auto i : v) {
cout << i << " ";
}
return 0;
}
以上代码中,我们使用下标来遍历vector
容器,并将每个元素的值乘以2。通过第二个for-each
循环,我们输出了修改过数值的vector
容器,输出结果为:2 4 6 8 10
。
四、遍历vector删除符合条件的元素
在遍历vector
容器过程中,如果需要删除符合条件的元素,需要注意迭代器的失效问题。删除元素的时候应该使用erase()
函数,同时使用正确的迭代器指向,来防止删除后迭代器失效。下面是一个遍历vector
并删除其中的偶数元素的代码示例:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
for (auto it = v.begin(); it != v.end(); ) {
if (*it % 2 == 0) {
it = v.erase(it);
} else {
it++;
}
}
for (auto i : v) {
cout << i << " ";
}
return 0;
}
以上代码中,我们使用迭代器遍历vector
容器,并删除其中的偶数元素。使用erase()
函数删除元素后,迭代器应该指向erase()
函数返回的新迭代器,以防止迭代器失效。输出结果为:1 3 5
。
五、vector遍历
遍历vector
除了使用for
循环和for-each
语句之外,还可以使用std::for_each()
算法进行遍历。与for
循环和for-each
语句不同,for_each()
算法需要传入一个函数对象用于处理每个元素。下面是一个使用for_each()
算法遍历vector
并进行求和的代码示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
int sum = 0;
std::for_each(v.begin(), v.end(), [&](int i) {
sum += i;
});
cout << "Sum: " << sum << endl;
return 0;
}
以上代码中,我们使用for_each()
算法遍历vector
容器,并使用lambda表达式进行求和操作。输出结果为:Sum: 15
。
六、vector遍历删除
除了在遍历容器中删除元素之外,还可以使用std::remove_if()
算法进行删除操作。std::remove_if()
算法可以删除符合特定条件的元素,并将剩余的元素移到vector
的前面。下面是一个使用std::remove_if()
算法遍历vector
并删除其中偶数元素的代码示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
v.erase(std::remove_if(v.begin(), v.end(), [](int i) {
return i % 2 == 0;
}), v.end());
for (auto i : v) {
cout << i << " ";
}
return 0;
}
以上代码中,我们使用std::remove_if()
算法遍历vector
容器,删除其中的偶数元素。最后我们使用遍历容器的方式输出vector
容器的内容,输出结果为:1 3 5
。
七、vector大小
在遍历vector
容器的过程中,需要知道vector
容器中的元素数量,可以使用size()
函数获取vector
容器中元素的个数。下面是一个输出vector
容器大小的代码示例:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v {1, 2, 3, 4, 5};
cout << "Vector size: " << v.size() << endl;
return 0;
}
以上代码中,我们输出了vector
容器中元素的个数,输出结果为:Vector size: 5
。
八、遍历vector里的对象
在实际编程中,vector
容器并不仅仅只存储基本数据类型,还可能存储结构体、类等自定义对象。遍历vector
中的对象与遍历基本数据类型并没有太大区别,具体使用方式与前面的示例基本相同。下面是一个存储自定义结构体的vector
容器,并遍历输出每个元素的成员变量值的代码示例:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Person {
string name;
int age;
};
int main() {
vector<Person> v {
{"Alice", 20},
{"Bob", 25},
{"Charlie", 30},
{"David", 35},
{"Ella", 40}
};
for (auto it = v.begin(); it != v.end(); it++) {
cout << "Name: " << it->name << ", Age: " << it->age << endl;
}
return 0;
}
以上代码中,我们定义了一个Person
结构体,包含name
和age
两个成员变量。我们将多个Person
对象存储在vector
容器中,并使用迭代器遍历vector
容器,输出每个元素的成员变量值。