vec = {1, 2, 3, 3, 4, 4}; iter = unique(vec.begin(), vec.end(), [](int &a, int &b) -> bool { return (a == b); }); beg = vec.begin(); while (beg != iter) { cout << *beg << " "; // 1 2 3 4 beg++; } cout << endl;
时间: 2024-04-18 09:32:41 浏览: 21
这段代码演示了如何使用unique函数去除容器中的连续重复元素。首先,我们定义了一个整数向量vec,并初始化为{1, 2, 3, 3, 4, 4}。然后,我们使用unique函数对vec进行操作,该函数会将容器中相邻的重复元素移动到容器的末尾,并返回指向新的逻辑结尾的迭代器。在这个例子中,我们使用lambda表达式作为谓词来判断两个元素是否相等。
接下来,我们创建了一个迭代器iter,它指向去除重复元素后的新逻辑结尾。然后,我们使用一个迭代器beg初始化,指向vec的开头。在while循环中,我们逐个输出beg指向的元素,并将beg递增。循环继续直到beg等于iter。
最终的输出结果为:1 2 3 4
相关问题
vec.begin()和vec.end()怎么写
这是一个 C++ 语言中的迭代器,用于指向 vector 容器中的第一个元素和最后一个元素的下一个位置。具体写法如下:
```c++
vector<int> vec = {1, 2, 3, 4, 5};
auto begin_iter = vec.begin(); // 指向第一个元素的迭代器
auto end_iter = vec.end(); // 指向最后一个元素的下一个位置的迭代器
```
其中,auto 关键字可以自动推导变量类型。也可以显式声明迭代器类型:
```c++
vector<int>::iterator begin_iter = vec.begin();
vector<int>::iterator end_iter = vec.end();
```
注意,end_iter 指向的是最后一个元素的下一个位置,因此在使用时需要注意。例如,遍历 vector 容器中的元素可以使用如下的代码:
```c++
for (auto iter = vec.begin(); iter != vec.end(); ++iter) {
cout << *iter << " ";
}
```
int main() { vector<Animal*> vec; vec.push_back(new Animal("tiger", 1.2, 250, 5)); vec.push_back(new Animal("lion", 1.0, 200, 6)); vec.push_back(new Animal("elephant", 2.5, 5000, 25)); vec.push_back(new Animal("giraffe", 5.5, 800, 12)); sort(vec.begin(), vec.end(), compareWeight); for (vector<Animal*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { cout << (*iter)->getName() << ": " << (*iter)->getWeight() << endl; } cout << "The heaviest animal: " << vec.back()->getName() << endl; for (vector<Animal*>::iterator iter = vec.begin(); iter != vec.end(); ++iter) { delete *iter; } return 0; } 这段代码不用指针应该怎么写呢?
可以使用智能指针 `std::unique_ptr` 来替代原先的裸指针,避免手动管理内存。修改后的代码如下所示:
```
int main() {
vector<std::unique_ptr<Animal>> vec;
vec.push_back(std::make_unique<Animal>("tiger", 1.2, 250, 5));
vec.push_back(std::make_unique<Animal>("lion", 1.0, 200, 6));
vec.push_back(std::make_unique<Animal>("elephant", 2.5, 5000, 25));
vec.push_back(std::make_unique<Animal>("giraffe", 5.5, 800, 12));
sort(vec.begin(), vec.end(), compareWeight);
for (auto& animal : vec) {
cout << animal->getName() << ": " << animal->getWeight() << endl;
}
cout << "The heaviest animal: " << vec.back()->getName() << endl;
return 0;
}
```
值得注意的是,在使用 `std::unique_ptr` 时,我们需要使用 `std::make_unique` 来分配内存。此外,由于智能指针会自动管理内存,我们不再需要手动删除指针,因此删除指针的那个循环可以省略。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)