로 된 valarray 변환? valarray<int>
이 있고 기본 사용자 정의 배열로 다시 변환해야한다고 가정합니다. 나는 문서에서 아무것도 찾지 못했습니다.우리는 다음과 같은 기본 사용자 정의 배열에서 <code>valarray</code>를 초기화 할 수있는 기본적인 배열
답변
valarray
개체의 크기가 컴파일 타임에 알려지지 않았기 때문에 동적 메모리를 사용하지 않고 valarray
에서 배열을 만들 수 없습니다.
std::valarray<int> test{10, 20};
int arr[test.size()]; // Not standard C++. Some compilers support this
// as an extension.
// This is how you can get a dynamic array from a valarray.
int* arr = new int[test.size()];
std::copy(begin(test), end(test), arr);
대신 응용 프로그램 코드에서 동적으로 할당 된 메모리를 관리하기 위해 노력하는 std::vector<int>
를 사용하는 것이 더 좋을 것이다.
std::vector<int> arr(begin(test), end(test));
우리는 어떻게 다른 방법으로 주위를 이동할 수 있습니다? 당신이 컴파일시
valarray
의 크기를 알고있는 경우
, 당신은 int[3]
을 준비하고, 예를 들어 각각의 요소에 값을 복사 할 수 있습니다 std::copy
사용 : 크기는 컴파일 타임에 알려져 있지 않은 경우 대신 std::vector
를 사용
#include <valarray>
#include <iostream>
int main()
{
std::valarray<int> va { 1, 2, 3 };
int arr[] = { va[0], va[1], va[2] };
std::cout << arr[0] << '\n';
std::cout << arr[1] << '\n';
std::cout << arr[2] << '\n';
}
:
#include <valarray>
#include <algorithm>
#include <iostream>
int main()
{
std::valarray<int> va { 1, 2, 3 };
int arr[3] = { 0 };
std::copy(begin(va), end(va), arr);
std::cout << arr[0] << '\n';
std::cout << arr[1] << '\n';
std::cout << arr[2] << '\n';
}
당신은 심지어 바로 올바른 값으로 배열을 초기화 할 수
#include <valarray>
#include <vector>
#include <iostream>
int main()
{
std::valarray<int> va { 1, 2, 3 };
std::vector<int> v(begin(va), end(va));
for (auto const& element : v)
{
std::cout << element << '\n';
}
}
배열 크기가 크고'std :: copy'의 복잡성이 선형 인 경우. 최적화 된 방법은 무엇입니까? –
@IbrahimYousaf : 알아 내려면 측정해야합니다. 아마 당신은 대안적인 방법을 찾아야한다 : (1)'std :: valarray'를'std :: vector'를 위해 완전히 없애고, (2) 나머지 코드를 반복자 쌍을 사용하도록 리팩토링하고, 적어도 C++을 사용할 수 있다면'std :: valarray'의'begin'과'end' 전문화를 계속 사용할 수 있습니다. 그것은 valarray의 내용으로 무엇을 할 것인가에 달려 있습니다 ... –
@IbrahimYousaf 배열로부터 'valarray'를 만드는 것은 또한 선형 시간입니다. –
- 1. 기본 클립 내가 클립 다음과 같은 아주 기본적인 문제를 해결하고자하는
- 2. 우리는 우리는 우리는 다음과 같은 기능을 제공했다고 가정 우리는 다음과 같은 기능
- 3. 배열 구성원 초기화 사용자 정의 형식
- 4. 여러 배열에서 사용자 정의 JSON 배열 만들기
- 5. 우리는 다음과 같은 코드를 부여
- 6. 나는 다음과 같은 구조의 사용자 스키마를 배열
- 7. 우리는 서버에서 데이터를 읽을 수있는 다음과 같은 코드를 사용하여
- 8. 사용자 정의 레이아웃 나는 다음과 같은 사용자 정의 레이아웃을 디자인했다
- 9. 우리는 다음과 같은 절차 텍스트를 암호화하는 <strong>.NET</strong>를 사용하여 .NET
- 10. 어떻게 우리는 다음과 같은 한 <code>standalone.xml</code>에서
- 11. 사용자 정의 형의 배열
- 12. 초기화 정적 배열 (C + +를)
- 13. 나는 다음과 같은 기본적인 수학 연산에 열거를 선언 할 열거
- 14. 사용자 정의 순서는 다음과 같은 속성이 그
- 15. "배열 a"를 포함하는 "배열 b"를 포함하는 "배열 a"를 어떻게 초기화 할 수 있습니까?
- 16. 초기화 사용자 정의 클래스
- 17. 우리는 사용자 정의 멀티-Dimentional 배열에
- 18. 사용자 정의 IServer 구현은 다음과 같은 IISIntegration
- 19. 디버거에서 탐색 할 수있는 사용자 정의 컨테이너
- 20. JavaScript의 사용자 정의 배열 정렬
- 21. 나는 다음과 같은 클래스가 자바 객체 초기화
- 22. 콘텐츠 우리는 다음과 같은 지시를 한 templateUrl
- 23. 우리는 다음과 같은 사전을 가지고 있음을,
- 24. 나는 다음과 같은 배열에서 값을 얻고있다 knockoutjs
- 25. 나는 다음과 같은 제어 할 수있는 형식으로
- 26. 형식을로드 할 수 없습니다 - 사용자 정의 ViewPage와 같은 기본 클래스
- 27. vcproj를 사용자 정의 할 수있는 도구가 있습니까?
- 28. 다음과 같은 I 배열이 주어 배열
- 29. MacRuby 사용자 정의 초기화 프로그램
- 30. , 우리는 다음과 같은 해시 MAP이는 HashMap
'std :: copy'의 복잡성과 루프의 복잡성이 같지 않습니까? –
@IbrahimYousaf, 네, 그렇습니다. –
@IbrahimYousaf : 실제로는 더 빠를 수도 있습니다. http://en.cppreference.com/w/cpp/algorithm/copy를 참조하십시오 : * "실제로, std :: copy의 구현은 다중 할당을 피하고 std :: memmove와 같은 대량 복사 함수를 사용합니다. 형식은 TriviallyCopyable입니다. "* –