有没有在C ++印刷阵列的方法吗?
我试图使该反转用户输入数组,然后打印出来的功能。 我试着用搜索引擎这个问题,它似乎像C ++不能打印阵列。 这不可能是真的可以吗?
有没有在C ++印刷阵列的方法吗?
我试图使该反转用户输入数组,然后打印出来的功能。 我试着用搜索引擎这个问题,它似乎像C ++不能打印阵列。 这不可能是真的可以吗?
你不能只遍历元素? 像这样:
for (int i = numElements - 1; i >= 0; i--)
cout << array[i];
注:由于马克西姆Egorushkin指出,这可能溢出。 见下面他的评论为更好的解决方案。
使用STL
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
std::vector<int> userInput;
// Read until end of input.
// Hit control D
std::copy(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(),
std::back_inserter(userInput)
);
// Print in Normal order
std::copy(userInput.begin(),
userInput.end(),
std::ostream_iterator<int>(std::cout,",")
);
std::cout << "\n";
// Print in reverse order:
std::copy(userInput.rbegin(),
userInput.rend(),
std::ostream_iterator<int>(std::cout,",")
);
std::cout << "\n";
// Update for C++11
// Range based for is now a good alternative.
for(auto const& value: userInput)
{
std::cout << value << ",";
}
std::cout << "\n";
}
我建议用鱼骨运营商?
for (auto x = std::end(a); x != std::begin(a); )
{
std::cout <<*--x<< ' ';
}
(你能发现吗?)
除了for循环基础的解决方案,你也可以使用ostream_iterator <> 。 下面是利用在(现已退休)SGI STL参考样本代码的示例:
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
short foo[] = { 1, 3, 5, 7 };
using namespace std;
copy(foo,
foo + sizeof(foo) / sizeof(foo[0]),
ostream_iterator<short>(cout, "\n"));
}
这会产生以下内容:
./a.out
1
3
5
7
然而,这可能是矫枉过正满足您的需求。 一个for循环直大概是所有你需要,虽然litb的模板糖是相当不错的了。
编辑 :忘记要求“中反面印刷”。 下面是做这件事:
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
short foo[] = { 1, 3, 5, 7 };
using namespace std;
reverse_iterator<short *> begin(foo + sizeof(foo) / sizeof(foo[0]));
reverse_iterator<short *> end(foo);
copy(begin,
end,
ostream_iterator<short>(cout, "\n"));
}
和输出:
$ ./a.out
7
5
3
1
编辑 :C ++ 14更新,使用状阵列迭代器功能简化了上面的代码段的std ::开始()和标准:: rbegin() :
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
short foo[] = { 1, 3, 5, 7 };
// Generate array iterators using C++14 std::{r}begin()
// and std::{r}end().
// Forward
std::copy(std::begin(foo),
std::end(foo),
std::ostream_iterator<short>(std::cout, "\n"));
// Reverse
std::copy(std::rbegin(foo),
std::rend(foo),
std::ostream_iterator<short>(std::cout, "\n"));
}
但是也有一些没有申报,但在其他方面创造,特别是利用申报阵列和阵列new
:
int *p = new int[3];
用3个元素数组是动态创建的(和3
可能在运行时被计算,太),和指向它的指针,其具有从其类型擦除的尺寸被赋值于p
。 你不能得到规模再打印该数组。 只接收指向它的指针的函数可以因此不打印数组。
印宣布阵列很容易。 您可以使用sizeof
得到他们的大小和尺寸转嫁给包括一个指向数组元素的功能。 但你也可以创建一个接受数组,并从其声明的类型推断出它的大小的模板:
template<typename Type, int Size>
void print(Type const(& array)[Size]) {
for(int i=0; i<Size; i++)
std::cout << array[i] << std::endl;
}
这里的问题是,它不会接受指针(显然)。 最简单的解决方案,我认为,是使用std::vector
。 这是一个动态的,可调整大小的“阵列”(你会期望从一个真实的语义),其中有一个size
成员函数:
void print(std::vector<int> const &v) {
std::vector<int>::size_type i;
for(i = 0; i<v.size(); i++)
std::cout << v[i] << std::endl;
}
你可以,当然,也使这个模板接受其他类型的载体。
大多数文库的在C ++中常用的不能打印的阵列,本身。 你会通过它必须手动循环并打印出每个值。
打印阵列和倾倒许多不同类型的对象是高级语言的特点。
必然是! 您可以通过数组必须循环和单独打印出的每个项目。
C ++可以打印任何你想要的,如果你的程序是这样做的。 你必须要经过自己的数组打印每个元素。
这可能有助于//打印的数组
for (int i = 0; i < n; i++)
{cout << numbers[i];}
n是阵列的尺寸
我的答案很简单:
#include <iostream>
using namespace std;
int main()
{
int data[]{ 1, 2, 7 };
for (int i = sizeof(data) / sizeof(data[0])-1; i >= 0; i--) {
cout << data[i];
}
return 0;
}
或者您可以使用此: https://github.com/gileli121/VectorEx
你可以很容易地显示与DisplayVector_1d阵列()。 它发展下视觉工作室2015吨工作只能在Windows(窗口上测试7 64位)。
你在找什么在这个库是DisplayVector_1d。 一世
它将显示在列表视图GUI阵列。 这就像在AutoIt中的_ArrayDisplay功能。
下面是一个例子如何使用此:
// includes.functions
#include <windows.h>
#include "VectorEx\VectorEx.h"
#include "VectorEx\VectorDisplay.h"
using namespace vectorex;
using namespace vectordisplay;
/*
This example shows how to use display std::vector array datatype
with vectordisplay::DisplayVector_1d
*/
int main()
{
std::vector<std::string> stringVector;
stringVector.push_back("Bob");
stringVector.push_back("Fob");
stringVector.push_back("Rob");
stringVector.push_back("Nob");
DisplayVector_1d(&stringVector);
return 0;
}
请注意,我刚开始在这个项目上。 欢迎您来提高代码并修复错误