| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1447 人关注过本帖
标题:关于C++比C#不好用的一点。
只看楼主 加入收藏
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
关于C++比C#不好用的一点。
C#里面有一个List容器跟C++里的Vector容器类似。

在C#里有一个T类,a,b,c.已经装在TList容器里面。
如果我想从TList容器从删除这三个元素的话,List.Remove(a);
List.Remove(b);  List.Remove(c)就行了。

但是C++里面,如果有一个T类,a,b,c对象。 已经装在TVector容器里面。
然后,T类有一个成员变量 float value;
如果我想从TVector里面删除这三个对象的话,要这样写!

Vector<T>::iterator iter;
for (iter=TVector.begin();iter!=TVector.end();++iter)
{
    if ((*iter).value==a.value)
        TVector.erase(iter);
    if ((*iter).value==b.value)
        TVector.erase(iter);
    if ((*iter).value==c.value)
        TVector.erase(iter);
}

如果需要很多东西才能分辨每一个元素的话,上面的代码要边长很多。

这是C++语言本身的缺点还是我对C++的了解不够,C++也有要一个很方便的删除方式?
我试过 TVector.erase(a);    TVector.erase(&a);   两个都不行。


搜索更多相关主题的帖子: C++ C# 容器 value erase 
2018-12-09 22:11
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:2 
std::vector::erase()

iterator erase (iterator position);  //删除指定元素

iterator erase (iterator first, iterator last);  //删除指定范围内的元素

  返回值:指向删除元素(或范围)的下一个元素。(An iterator pointing to the new location of the element that followed the last element erased by the function call. This is the container end if the operation erased the last element in the sequence.)
删除元素的话要先找到其所在的位置,
2018-12-09 22:18
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:18 
这两天要做 C# 的课程设计
刚好拿了本 C# 的书看到集合这里
C# 是这么干的没错, C++ 也没差到哪里去吧
程序代码:
#include <iostream>
#include <vector>

using namespace std;
int main(int argc, char *argv[]) {
    vector<int> vec {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int a {2};
    int b {4};
    int c {8};
    vec.erase(find(vec.begin(), vec.end(), a));    //C# : vec.Remove(a);
    vec.erase(find(vec.begin(), vec.end(), b));    //C# : vec.Remove(b);
    vec.erase(find(vec.begin(), vec.end(), c));    //C# : vec.Remove(c);
    for(const auto &c : vec) {
        cout << c << "\t";
    }
    cout << endl;
}

ps : C# 不就是以方便开发著称的吗
pps : C++ 就传个迭代器吧, 我不觉得麻烦
ppps : 你的代码可能会 UB
pppps : 你对 C++ 的了解确实不够
2018-12-09 23:51
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
C# 风格
程序代码:
#include <iostream>
#include <vector>

using namespace std;
template <typename T>
void erase(vector<T> &vec, const T &value) {
    vec.erase(find(vec.begin(), vec.end(), value));
}
int main(int argc, char *argv[]) {
    vector<int> vec {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int a {2};
    int b {4};
    int c {8};
    erase(vec, a);
    erase(vec, b);
    erase(vec, c);
    for(const auto &c : vec) {
        cout << c << "\t";
    }
    cout << endl;
}
2018-12-09 23:58
快速回复:关于C++比C#不好用的一点。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017326 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved