【问题标题】:C++ Vector Elements CountC++ 向量元素计数
【发布时间】:2011-06-12 02:45:16
【问题描述】:

在 C++ 中,使用矢量头,我如何找到元素的数量?

#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
int primer(int max);
int main()
{
    system("pause");
    return 0;
    primer(1000);
}

int primer(int max){
    vector<int> a;
    a[1]=2;
    for (int i=2;i<=max;i++){
    bool prime=true;
    for (int ii=1;ii<=#a;ii++) {
    if i/a[ii]==math.floor(i/a[ii]) {
    prime=false;
    }
    }
    if prime==true {
    a[#a+1]=i;
    }
    }
    for (i=1;i<=#a;i++) {
    cout << a[i]);
    }
}
}

我最初编写的代码 对于 lua,这是我将其转换为 C++ 的尝试。我会很感激细节,例如,一个坏线的具体替代品。我尝试将#a 替换为a.size,但没有成功。

修订:

#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
#include <vector>
using namespace std;
int primer(int max);
int main()
{
    primer(5);
    system("pause");
    return 0;
}

int primer(int max){
    vector<int> a;
    a[1]=2;
    for (int i=2;i<=max;i++){
    bool prime=true;
    for (int ii=0;ii<a.size();ii++) {
    if (i/a[ii]==floor(i/a[ii])) {
    prime=false;
    }
    }
    if (prime==true) {
    a.push_back(i);
    }
    }
    for (int iii=0;iii<=a.size();iii++) {
    cout << a[iii] << endl;
    }
}

它没有运行就崩溃了。这是什么原因?

【问题讨论】:

  • 你也会遇到范围问题。要正确使用向量,您必须为其指定大小或使用 push_back
  • @TimeCoder:无意冒犯,但试图通过在 SO 上发帖来学习 C++ 编程(编辑)会浪费您和我们的时间。
  • 与您刚刚发布的 99% 相似问题 stackoverflow.com/questions/4741436/boundless-arrays 相同或替代。
  • @Tomalak:这个人正在尝试使用std::vector,正如另一个人的答案中所建议的那样。是的,他们应该被链接,不,这不是骗局。
  • @PigBen:你在开玩笑吗? 32 行代码 sn-ps 实际上是相同的!另一个根本不是关于向量的。诡异的。他应该扩展他最初的问题,因为他只是建立在他得到的回答的基础上。他应该在 that 线程上解决有关这些响应的问题。

标签: c++ translation primes


【解决方案1】:

a.size().

我建议使用某种参考资料,例如http://cplusplus.com/reference/stl/vector/.

【讨论】:

  • 哦! .size(),而不是属性。这就说得通了。谢谢:)
  • cplusplus.com 以充满错误而著称。 Apache stdlib 参考更胜一筹。
  • @TimeCode:C++中没有“属性”之类的东西
  • @John Dibling,没错。那是我犯的错误。
【解决方案2】:

回答您的直接问题:

a.size();  // use size as a function

但是您的代码还有其他一些问题:

vector<int> a;
a[1]=2;

通常你需要预先设置a的大小,因为C++必须为它分配空间。不过你可以使用push_back(),它会根据需要逐渐增加空间。

另外,C++ 数组从 0 开始计数:

for (int ii=1;ii<=#a;ii++) {

这应该是

ii = 0

由于数组从 0 开始,它们以 size() - 1 结束,而不是 size()

【讨论】:

  • 您发现了一个错误并且没有修复它导致的溢出:(
  • 更不用说@TimeCoder 在调用函数之前就从main 返回了!
  • @John Ninefingers 已经抓到了。
  • @chris:有那么一瞬间,我以为你叫我“九指”。完全没有意义!大声笑
【解决方案3】:
for( int ii = 0; ii < a.size(); ++ii )

C 和 C++ 数组索引从零开始并以大小 1 结束,因此您需要比较小于,而不是小于或等于。矢量遵循相同的规则。

【讨论】:

    【解决方案4】:

    另一个需要指出的明显问题:

    int main()
    {
        system("pause");
        return 0;
        primer(1000);
    }
    

    你的函数永远不会被调用。当 main 返回时,您的应用将退出。

    【讨论】:

    • XD 别担心。一旦我看到这样的错误,我就可以快速修复它。
    • 很高兴知道!但不得不说……我情不自禁。
    • 哇,我完全错过了main()。我非常专注于primer() 的所有问题。
    【解决方案5】:
     a[#a+1]=i;
    

    改用 size() 变成:

     a[ a.size() + 1 ] = i;
    

    这在语法上是正确的,但肯定是错误的。应该是:

     a.push_back(i);
    

    阅读 Oli 引用的 API。

    【讨论】:

    • 其实cplusplus.com是出了名的错误百出。 Apache stdlib 参考更胜一筹。
    • 我不得不承认我直接使用标准文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多