无法按cpp中的值返回矢量
Cannot return vector by value in cpp
拥有这个:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
struct Info{
string word;
unsigned int i;
};
vector<Info> unique(vector<Info> &vec){
vector<Info> ret;
size_t len = vec.size();
for(int i=0; i<len; i++){
int j = 0;
for(; j<len; j++){
if(vec[i].word == vec[j].word){
vec[i].i++;
break;
}
}
if(j>=len){
Info info{vec[i].word, 0};
ret.push_back(info);
}
}
return ret;
}
int main(){
vector<Info> words, origs;
string tmp;
while(cin >> tmp){
Info info{tmp, 0};
words.push_back(info);
}
origs=unique(words);
cout << "number of elements of vector: " << words.size() << ", of which are unique: ";
for(int i=0; i<origs.size(); i++){
cout << origs[i].word << " ";
}
}
应该给出向量的唯一元素,但如果我运行它:foo.cpp:
a b c b c
number of elements of vector: 5, of which are unique:
origs=unique(words);
不应获得唯一的值,并且上述结果应为a b c
。我不确定break
是否只从if
块中断,或者也从内部for循环中断(这是有意的(。有人能帮忙吗?
break
用于从循环中断,而不是从if
条件中断,因此是的,break
从内部循环中断。这将是一种更容易的方法来检查ret向量中的值,如果它存在,不要推送它
vector<Info> unique(vector<Info> &vec){
vector<Info> ret;
size_t len = vec.size();
for(int i=0; i<len; i++){
boolean exists = false;
for(int j = 0; j < ret.size(); j++){
if(vec[i].word == ret[j].word){
exists = true;
break;
}
}
if(!exists){
Info info{vec[i].word, 0};
ret.push_back(info);
}
}
return ret;
}
break
将终止它所在的最内层循环,在本例中,这是您的第一个嵌套for
循环。
if(j>=len){
Info info{vec[i].word, 0};
ret.push_back(info);
}
这个块永远不会执行,这可能就是为什么origs
向量总是空的原因。
i
和j
都在整个向量上进行索引。
因此,您在第一次迭代中将第一个元素与自身进行比较,在第二次迭代中将第二个元素与自己进行比较,以此类推,直到您将每个元素与自身相比较,并发现所有元素都等于某个值
因此,ret
中不会添加任何内容。
我认为最简单的解决方案是将vec
的元素与ret
的元素进行比较。
相关文章:
- 无法按cpp中的值返回矢量
- 从 c 或 cpp 系列子函数返回到主函数
- 如何循环访问 cpp 中的函数返回的字符指针数组
- cpp 返回具有相同输入的不同输出
- 我如何在函数 cpp 中返回字符串
- 如何在 Cython 中定义返回 cpp 定义类型的函数?
- 如何从 cpp 中的函数返回自定义类对象?
- 返回 bool 作为 CPP 中 bool 运算符 [] 中的值
- cpp 检查抱怨危险使用 c_str(). c_str() 返回的值在本次调用后无效,如何解决?
- 我在生成返回为数不多的模板化参数之一cpp的函数时遇到问题
- 为什么在.h中定义的私有结构需要.cpp文件中的返回类型中的范围
- YAML-CPP的顺序返回数据
- 从函数 CPP 返回 int 或 string.c_str() 时的两个不同的行为
- Dynamic_cast何时返回0,什么时候引发异常?CPP
- 返回的const char*不打印好弦(CPP)
- 为什么我不能通过CPP返回将char*添加到char*中
- CPP代码方程式返回相同值,无论输入如何
- JSON CPP ISMEMBER()始终返回true
- CPP - 使用 * 或 & 返回地址
- cpp-lower_bound返回错误的迭代器