v.push_back
时间: 2024-06-08 10:12:20 浏览: 113
v.push_back 是 C++ 中用于向 vector(向量)容器中添加元素的函数。它将一个元素插入到 vector 的末尾,并且会自动扩容以容纳新元素。语法如下:
```c++
vector<T> v;
v.push_back(value);
```
其中,T 是 vector 容器中元素的类型,value 是要插入的元素的值。
相关问题
#include<iostream> #include<vector> using namespace std; int main () { vector <int> v; v.push_back(9); v.push_back(3); v.push_back(9); int len = unique(0,v.size())-v; return 0; }
这段代码中有一些错误。第一个问题是,unique函数的第一个参数应该是迭代器而不是数字0,可以改为使用v.begin()。第二个问题是,unique函数返回的是去重后的尾迭代器,需要再减去v.begin()才能得到去重后的元素个数。正确的代码如下:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main () {
vector<int> v;
v.push_back(9);
v.push_back(3);
v.push_back(9);
vector<int>::iterator it = unique(v.begin(), v.end());
int len = it - v.begin();
return 0;
}
```
注意到这段代码只去重了相邻的重复元素,如果需要完全去重需要先排序再去重。
检查这段代码 class Solution { public: int lengthOfLongestSubstring(string s) { int temp = 0; vector<char> v; v.push_back(s[0]); for(int i=1;i<s.length();i++) for(vector<char>::iterator it = v.begin();it!=v.end();it++){ if (*it == s[i]) { v.erase(v.begin(), it + 1); } v.push_back(s[i]); if (v.size() > temp) temp = v.size(); } return temp; } };
这段代码是一个求字符串中最长无重复子串长度的函数,算法的时间复杂度为 O(n^2),其中 n 是字符串的长度。具体来说,该函数的实现方式是:
1. 声明一个变量 temp 存储当前找到的最长无重复子串长度,初始化为 0。
2. 声明一个 vector v 存储当前的无重复子串。
3. 将字符串 s 的第一个字符加入 vector v。
4. 从字符串 s 的第二个字符开始遍历,对于每个字符:
a. 遍历 vector v 中的字符,查找是否有与当前字符相同的字符。
b. 如果找到了相同的字符,就从 vector v 中删除从开头到该位置的所有字符,包括该位置的字符。
c. 将当前字符加入 vector v。
d. 如果 vector v 的长度大于 temp,则更新 temp。
5. 返回 temp。
该算法思路正确,但是实现上存在一些问题:
1. 如果字符串 s 为空,该函数会访问越界,需要加上判断语句。
2. 在删除 vector v 中的元素时,使用了 erase 函数,该函数的时间复杂度为 O(n),其中 n 是要删除的元素个数。这样会导致时间复杂度变高,可以使用双指针来实现删除。
3. 在查找是否有与当前字符相同的字符时,使用了遍历的方式,可以使用哈希表来实现常数时间内的查找。
4. 该算法的时间复杂度为 O(n^2),在字符串较长时效率较低,可以使用滑动窗口等更高效的算法来实现。
阅读全文