如何从矢量中删除所有项目? C++

Posted

技术标签:

【中文标题】如何从矢量中删除所有项目? C++【英文标题】:How can I erase all items from a vector? C++ 【发布时间】:2019-11-24 09:25:49 【问题描述】:

我只是想制作我所有的元素0,而不是手动完成

for (i = 1; i <= n; i++) 
    v[i] = 0;

我在网上发现我可以使用这个命令:v.clear(); 但它不起作用:

错误:在'v'中请求成员'clear',它是非类类型'int [101]'

这是我的代码:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n,i,v[101];

int main() 
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];

    v.clear();
    for(i=1;i<=n;i++)
        cout<<v[i]<<" ";

    return 0;

【问题讨论】:

因为'v'是一个数组而不是一个向量。 “我在网上发现我可以使用这个命令:v.clear(); -如果某些在线网站声明你可以使用本机数组来做到这一点,即int v[101]; 然后我建议您避免返回该站点;太垃圾了。 那里没有向量。 【参考方案1】:

我们有 std::fill,它也可以与 C 样式的数组一起使用:

std::fill(std::begin(v), std::end(v), 0);

【讨论】:

【参考方案2】:

你有一个数组。 C++ 中的数组没有方法。你需要的是调用标准的 C 函数 memset。

例如

#include <cstring>

//...

std::memset( v, 0, n * sizeof( int ) );

C++ 中数组的索引也是从 0 开始的。所以使用 for 循环,比如

for( i = 0; i < n; i++ )

【讨论】:

【参考方案3】:
    也许,你可以使用std::array,也可以像int v[101]一样指定大小。 然后,您可以使用v = 0 制作我的所有元素0。 例如:
#include <iostream>
#include <array>

using namespace std;

int main() 
    array<int, 101> v;
    for (auto &elem : v)
        cin >> elem;
    v = 0;
    for (auto elem : v)
        cout << elem << " ";

    如果你不喜欢std::array,你也可以这样做。
int v[5] = 1, 2, 3, 4, 5;
int *p = v;
while (*p++ = 0, *p != 0)  ;
    事实上,我认为用户 Evg 回答的std::fill(std::begin(v), std::end(v), 0); 是最好的。

【讨论】:

以上是关于如何从矢量中删除所有项目? C++的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.5 使用 C++,从 ComboBox 中删除和项目正在删除项目之前的所有项目

如何在 Visual Studio 2015(用于 C++)中仅禁用 SIMD 自动矢量化优化?

如何从c ++中的给定目录中删除所有文本文件

Qwt:如何从绘图中删除所有项目(曲线、标记等)

CMake如何验证循环是不是自动矢量化

如何从 Laravel 项目中删除所有迁移但保留表和字段