运行 没有重复的函数
Run function without duplicate
我想知道是否可以使函数 运行 不重复?
如果它循环遍历带有数字 1,2,2,3,4
的数组,我希望 2 只 运行 一次而不是两次。喜欢1,2,3,4
。如何检查 tab[i]
是否已经插入?我需要在 C++ 98 中执行此操作。
std::vector<int> noDup(n);
for(int k=0; k < n; k++) {
bool exists = false;
for(int c= 0; c < noDup.size(); c++) {
if(tab[k] == tab[c]) {
exists = true;
break;
}
if(exists == false) {
noDup.push_back(tab[k]);
}
}
}
for(auto c : noDup) {
cout << c << " ";
}
当我在标签数组 4 中插入多个元素时,
我输入 2,2,3,4
我得到输出 0 0 0 0 3 3 4 4 4
你做到了
if(exists == false) {
noDup.push_back(tab[k]);
}
放错地方了。它必须在检查所有元素之后。
向量 std::vector<int> noDup(n);
已经有 n
个元素,push_back()
将在初始 n
个元素之后添加元素。
似乎您想在不通过 reserve()
.
添加元素的情况下进行预分配
条件tab[k] == tab[c]
也是错误的。应该是 tab[k] == noDup[c]
.
另一个错误是使用 for(auto c : noDup)
(基于范围的 for 和 auto
),它在 C++11 中可用,但在 C++98 中不可用。
固定码:
std::vector<int> noDup;
noDup.reserve(n);
for(int k=0; k < n; k++) {
bool exists = false;
for(int c= 0; c < noDup.size(); c++) {
if(tab[k] == noDup[c]) {
exists = true;
break;
}
}
if(exists == false) {
noDup.push_back(tab[k]);
}
}
for(std::vector<int>::iterator it = noDup.begin(); it != noDup.end(); it++) {
cout << *it << " ";
}
更好的选择是使用 std::set
。
std::set<int> seen;
std::vector<int> noDup;
noDup.reserve(n);
for(int k=0; k < n; k++) {
if (seen.find(tab[k]) == seen.end()) {
seen.insert(tab[k]);
noDup.push_back(tab[k]);
}
}
for(std::vector<int>::iterator it = noDup.begin(); it != noDup.end(); it++) {
cout << *it << " ";
}
我想知道是否可以使函数 运行 不重复?
如果它循环遍历带有数字 1,2,2,3,4
的数组,我希望 2 只 运行 一次而不是两次。喜欢1,2,3,4
。如何检查 tab[i]
是否已经插入?我需要在 C++ 98 中执行此操作。
std::vector<int> noDup(n);
for(int k=0; k < n; k++) {
bool exists = false;
for(int c= 0; c < noDup.size(); c++) {
if(tab[k] == tab[c]) {
exists = true;
break;
}
if(exists == false) {
noDup.push_back(tab[k]);
}
}
}
for(auto c : noDup) {
cout << c << " ";
}
当我在标签数组 4 中插入多个元素时,
我输入 2,2,3,4
我得到输出 0 0 0 0 3 3 4 4 4
你做到了
if(exists == false) {
noDup.push_back(tab[k]);
}
放错地方了。它必须在检查所有元素之后。
向量 std::vector<int> noDup(n);
已经有 n
个元素,push_back()
将在初始 n
个元素之后添加元素。
似乎您想在不通过 reserve()
.
条件tab[k] == tab[c]
也是错误的。应该是 tab[k] == noDup[c]
.
另一个错误是使用 for(auto c : noDup)
(基于范围的 for 和 auto
),它在 C++11 中可用,但在 C++98 中不可用。
固定码:
std::vector<int> noDup;
noDup.reserve(n);
for(int k=0; k < n; k++) {
bool exists = false;
for(int c= 0; c < noDup.size(); c++) {
if(tab[k] == noDup[c]) {
exists = true;
break;
}
}
if(exists == false) {
noDup.push_back(tab[k]);
}
}
for(std::vector<int>::iterator it = noDup.begin(); it != noDup.end(); it++) {
cout << *it << " ";
}
更好的选择是使用 std::set
。
std::set<int> seen;
std::vector<int> noDup;
noDup.reserve(n);
for(int k=0; k < n; k++) {
if (seen.find(tab[k]) == seen.end()) {
seen.insert(tab[k]);
noDup.push_back(tab[k]);
}
}
for(std::vector<int>::iterator it = noDup.begin(); it != noDup.end(); it++) {
cout << *it << " ";
}