【问题标题】:Output (at most) 4 vector Elements in a Row连续输出(最多)4个向量元素
【发布时间】:2015-06-16 17:24:13
【问题描述】:
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
#include <conio.h>

using namespace std;

int main()
{
cout << "Enter the numbers: " << endl << "Write eof() when you want to end" << endl;
int x;
vector<int> num;
//enter numbers till eof() is encountered
while (cin >> x) {
    num.push_back(x);
}
//sort the vector
sort(num.begin(), num.end());
//get size of the vector
typedef vector<double>::size_type vec_sz;
vec_sz size = num.size();
//loop to print 4 numbers according to size
for (auto i = 0; i < size; i++)
{
    cout << num[i];
    if (i == size - 1)
        break;
    i++;
    cout << " " << num[i];
    if (i == size - 1)
        break;
    i++;
    cout << " " << num[i];
    if (i == size - 1)
        break;
    i++;
    cout << " " << num[i];
    if (i == size - 1)
        break;
    cout << endl;
    //<< " " << num[i + 1] << " " << num[i + 2] << " " << num[i + 3] <<
}
_getch();
return 0;
}

我想一次打印一个整数向量的 4 个数字。当我尝试通过在 for 循环中执行 i+=4 来打印向量时,编译器抱怨说 'i' 超出了向量的大小并且程序崩溃了。 现在,我所拥有的是工作,但我发现它现在的实现方式真的很无聊,必须有一个很好的方法来做到这一点。

所以我的问题是 -

1) 我怎样才能更多地整理代码?

2) 使用循环时,编译器如何访问存储向量内容的内存?

3) 如何实现错误检查,使循环变量不访问超出向量大小的元素?

【问题讨论】:

    标签: c++ loops memory vector compiler-optimization


    【解决方案1】:
    for (int i = 0; i < size; i++)
    {
        cout << num[i];
        if ((i % 4) == 3)
            cout << endl;
        else
            cout << " ";
    }
    if ((size % 4) != 0)
        cout << endl;
    

    【讨论】:

    • 在循环前面声明'i'
    • @DieterLücking 谢谢,已修复。
    【解决方案2】:

    一个解决方案可能是,

    for( int i = 0; i < size; ++i ) {
        int nextNumber = i + 1; // Just so you don't mix up the index
        if ( ( nextNumber % 4 ) == 0 ) {
            std::cout << num[ i ] << std::endl;
        }
        else {
            std::cout << num[ i ] << ' ';
        }
    }
    

    这使您只需更改一个数字即可轻松更改为其他尺寸。 (即,从 4 到 5 等)

    【讨论】:

      【解决方案3】:

      我参加本次比赛是使用免费功能来帮助您:

      template <typename RAN_IT>
      RAN_IT four_or_last(RAN_IT begin, RAN_IT end){
          for (RAN_IT it = begin; it != begin + 4; it++){
              if (it == end) 
                  return end;
          }
          return begin + 4;
      }
      

      循环可以描述为:

      for (auto it = num.begin(); it != num.end(); /*inc in inner loop*/) {
          for (auto in = it; in != four_or_last(it, num.end()); in++) {
              std::cout << *in << " ";
          }
          it = four_or_last(it, num.end());
          std::cout << std::endl;
      }
      

      【讨论】:

      • 请先编译测试,再粘贴垃圾
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2016-08-19
      • 2019-10-10
      • 2021-10-27
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多