c++ - 如何有条件地将元素添加到 std::array - C++11

标签 c++ arrays c++11

我有一个简单的程序:

#include <array>
#include <iostream>
#include <functional>
#include <algorithm>

using namespace std;

int main(){
    array<int, 5> myArr = {3, 10, 0, 5, 7};
    int badNum = 0;
    for(int item : myArr){
        cout << item << endl;
    }

    cout << "\n" << endl;
    cout << "\n" << endl;

    sort(myArr.begin(), myArr.end(), greater<int>());

    for(int item : myArr){
        cout << item << endl;
    }

    array<int, 4> goodFour;

    for (unsigned int i = 0; i < myArr.size(); i++){
        if(myArr[i] != badNum){
            // goodThree.append(myArr[i]); <-- This is where I am stuck
        }
    }

}

我一直在尝试将元素分配给 std::array。我知道在 std::vector 我可以使用 push_back 方法,但是在 std:array 上,如何分配给下一个(还没有分配)元素?我来自 Python 3.x,其中我们有 listappend 方法。我不是试图改变数组的大小,而是试图用值填充分配的空间。

我看过:

http://www.cplusplus.com/forum/beginner/67707/

http://www.cplusplus.com/forum/beginner/86394/

http://www.cplusplus.com/forum/beginner/152125/

但这些都是针对 vector 或原始 int[5] myArr 类型,而不是 std::array

最佳答案

如果您只想要前三个好数字,您将维护一个指向下一个索引的指针以插入:

for (int i = 0, k = 0; k < 3 && i < myArr.size(); i++) {
  if (myArr[i] != badNum) {
    goodThree[k++] = myArr[i];
  }
}

如果你想要所有好的数字,你可以使用 std::vector 并调用它的 push_back 方法:

std::vector<int> goodThree;
for (int i = 0; i < myArr.size(); i++) {
  if (myArr[i] != badNum) {
    goodThree.push_back(myArr[i]);
  }
}

关于c++ - 如何有条件地将元素添加到 std::array - C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126648/

相关文章:

c++ - 当 RCPP 程序无法正常工作时,有没有办法阻止 RGui 崩溃?

c++ - 当我0-初始化一个vector时,它和calloc有同样的效果吗?

c++ - NRVO 和 move

c++ - 如何在 C++11 的迭代器中获取有关 auto 标识符的更多详细信息

java - 如何使用 NetBeans 包含的所有库依赖项构建可执行文件?

c++ - 当我知道类型时,如何避免虚拟调用?

c++ - 按升序和降序打印链表

arrays - Swift 中与 JavaScript 的 Array.some() 和 Array.every() 相对应的是什么?

arrays - Swift - 更新多维 NSMutableDictionary 的值

javascript - 如何通过具有数组行的第一项的值来删除/删除javascript数组中的一行?